28. december 2011 - 20:11
Der er
5 kommentarer og 1 løsning
Finde data for max/min i tabel
Hej Jeg har en database med vandtemperaturer (2 stk. data pr. dag) Jeg har fået lavet et lille script, som finder højeste/laveste/gennemsnit for: Indeværende måned ($avgmo, $maxmo, $minmo) Indeværende år ($avgyr, $maxyr, $minyr) All-time ($avgall, $maxall, $minall) Jeg bruger følgende kode: $mysql_now = date( 'Y-m-d H:i:s'); $q = mysql_query("SELECT avg(vandtemp) AS aha, max(vandtemp) AS uhu, min(vandtemp) AS ihi FROM `$db`.`$wxtable` WHERE YEAR(DBTime) = YEAR('$mysql_now')"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $avgyr = sprintf("%01.1f",$m[aha]); $maxyr = sprintf("%01.1f",$m[uhu]); $minyr = sprintf("%01.1f",$m[ihi]); } $q = mysql_query("SELECT avg(vandtemp) AS aha, max(vandtemp) AS uhu, min(vandtemp) AS ihi FROM `$db`.`$wxtable` WHERE YEAR(DBTime) = YEAR('$mysql_now') AND MONTH(DBTime) = MONTH('$mysql_now')"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $avgmo = sprintf("%01.1f",$m[aha]); $maxmo = sprintf("%01.1f",$m[uhu]); $minmo = sprintf("%01.1f",$m[ihi]); } $q = mysql_query("SELECT avg(vandtemp) AS aha, max(vandtemp) AS uhu, min(vandtemp) AS ihi FROM `$db`.`$wxtable`"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $avgall = sprintf("%01.1f",$m[aha]); $maxall = sprintf("%01.1f",$m[uhu]); $minall = sprintf("%01.1f",$m[ihi]); } Tabellen består af 3 kolonner: DBTime (datostempel): yyyy--mm-dd hh:mm:ss (f.eks. 2011-12-2812:00:06) timestamp: unixtid 10 cifre (f.eks. 1325070006) vandtemp: vandtemperatur med 1 decimal (f.eks. 3.8) Mit spørgsmål går på, at jeg gerne vil have dato for hvornår max/min hændte. ($maxmo, $maxmo, $maxyr, $maxyr, $maxall, $maxall) Sig endelig til, hvis ovenstående ikke giver mening. Venlig hilsen Henrik
Annonceindlæg fra Infor
28. december 2011 - 20:23
#1
SELECT DBTime from `$db`.`$wxtable` WHERE vandtemp = $maxsomething AND ... vil finde 1 eller flere datoer hvor temperatur er max.
28. december 2011 - 20:50
#2
Hejsa Arne Tak for din hurtige tilbagemelding. Jeg er desværre nok nødt til at have lidt mere hjælp, da jeg ikke selv er nogen hav til kodning. Det er en kammerat der har lavet scriptet, som finder max/min for indeværende måned, år og alltime. Han kan ikke lige gennemskue hvordan man skal finde datoerne for ovenstående max/min værdier. Kan du prøve at lave lidt mere detaljeret kode? På forhånd tak. Venlig hilsen Henrik
28. december 2011 - 20:59
#3
$q = mysql_query("SELECT DBTime FROM `$db`.`$wxtable` WHERE vandtemp = $maxyr AND YEAR(DBTime) = YEAR('$mysql_now')"); $q = mysql_query("SELECT DBTime FROM `$db`.`$wxtable` WHERE vandtemp = $maxmo AND YEAR(DBTime) = YEAR('$mysql_now') AND MONTH(DBTime) = MONTH('$mysql_now')"); $q = mysql_query("SELECT DBTime FROM `$db`.`$wxtable` WHERE vandtemp = $maxall");
29. december 2011 - 07:47
#4
Godmorgen Tak for koden. Jeg har prøvet at tilføje den til mit script - men jeg kan ikke rigtig få nogle data ud af det: $q = mysql_query("SELECT DBTime FROM `$db`.`$wxtable` WHERE vandtemp = $maxyr AND YEAR(DBTime) = YEAR('$mysql_now')"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $maxyrtime = $m[DBTime]; } $q = mysql_query("SELECT DBTime FROM `$db`.`$wxtable` WHERE vandtemp = $maxmo AND YEAR(DBTime) = YEAR('$mysql_now') AND MONTH(DBTime) = MONTH('$mysql_now')"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $maxmotime = $m[DBTime]; } $q = mysql_query("SELECT DBTime FROM `$db`.`$wxtable` WHERE vandtemp = $maxall"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $maxalltime = $m[DBTime]; } echo $maxyrtime; echo $maxmotime; echo $maxalltime; Der må være noget jeg mangler? Venlig hilsen Henrik
29. december 2011 - 13:04
#5
Hej igen Jeg har fået det til at fungere med følgende kode: $conn = mysql_connect($host, $user, $pass) or die ('Error connecting to mysql'); mysql_select_db($db); $mysql_now = date( 'Y-m-d H:i:s'); // MAX/MIN/GNS. INDEVÆRENDE MÅNED $q = mysql_query("SELECT avg(vandtemp) AS aha, max(vandtemp) AS uhu, min(vandtemp) AS ihi FROM `$db`.`$wxtable` WHERE YEAR(DBTime) = YEAR('$mysql_now') AND MONTH(DBTime) = MONTH('$mysql_now')"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $avgmo = sprintf("%01.1f",$m[aha]); $maxmo = sprintf("%01.1f",$m[uhu]); $minmo = sprintf("%01.1f",$m[ihi]); } $q = mysql_query("SELECT vandtemp, timestamp FROM `$db`.`vejrdata_badevand` u WHERE vandtemp = (SELECT MAX(vandtemp) FROM `$db`.`vejrdata_badevand` WHERE YEAR(DBTime) = YEAR('$mysql_now') AND MONTH(DBTime) = MONTH('$mysql_now'))"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $maxmo = sprintf("%01.1f",$m[vandtemp]); $maxmotime = date('d.m.Y',$m[timestamp]); } $q = mysql_query("SELECT vandtemp, timestamp FROM `$db`.`vejrdata_badevand` u WHERE vandtemp = (SELECT MIN(vandtemp) FROM `$db`.`vejrdata_badevand` WHERE YEAR(DBTime) = YEAR('$mysql_now') AND MONTH(DBTime) = MONTH('$mysql_now'))"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $minmo = sprintf("%01.1f",$m[vandtemp]); $minmotime = date('d.m.Y',$m[timestamp]); } // MAX/MIN/GNS. INDEVÆRENDE ÅR $q = mysql_query("SELECT avg(vandtemp) AS aha, max(vandtemp) AS uhu, min(vandtemp) AS ihi FROM `$db`.`$wxtable` WHERE YEAR(DBTime) = YEAR('$mysql_now')"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $avgyr = sprintf("%01.1f",$m[aha]); $maxyr = sprintf("%01.1f",$m[uhu]); $minyr = sprintf("%01.1f",$m[ihi]); } $q = mysql_query("SELECT vandtemp, timestamp FROM `$db`.`vejrdata_badevand` u WHERE vandtemp = (SELECT MAX(vandtemp) FROM `$db`.`vejrdata_badevand` WHERE YEAR(DBTime) = YEAR('$mysql_now'))"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $maxyr = sprintf("%01.1f",$m[vandtemp]); $maxyrtime = date('d.m.Y',$m[timestamp]); } $q = mysql_query("SELECT vandtemp, timestamp FROM `$db`.`vejrdata_badevand` u WHERE vandtemp = (SELECT MIN(vandtemp) FROM `$db`.`vejrdata_badevand` WHERE YEAR(DBTime) = YEAR('$mysql_now'))"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $minyr = sprintf("%01.1f",$m[vandtemp]); $minyrtime = date('d.m.Y',$m[timestamp]); } // MAX/MIN/GNS. ALL-TIME $q = mysql_query("SELECT avg(vandtemp) AS aha, max(vandtemp) AS uhu, min(vandtemp) AS ihi FROM `$db`.`$wxtable`"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $avgall = sprintf("%01.1f",$m[aha]); $maxall = sprintf("%01.1f",$m[uhu]); $minall = sprintf("%01.1f",$m[ihi]); } $q = mysql_query("SELECT vandtemp, timestamp FROM `$db`.`vejrdata_badevand` u WHERE vandtemp = (SELECT MAX(vandtemp) FROM `$db`.`vejrdata_badevand`)"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $maxall = sprintf("%01.1f",$m[vandtemp]); $maxalltime = date('d.m.Y',$m[timestamp]); } $q = mysql_query("SELECT vandtemp, timestamp FROM `$db`.`vejrdata_badevand` u WHERE vandtemp = (SELECT MIN(vandtemp) FROM `$db`.`vejrdata_badevand`)"); while ($m = mysql_fetch_array($q, MYSQL_BOTH)) { $minall = sprintf("%01.1f",$m[vandtemp]); $minalltime = date('d.m.Y',$m[timestamp]); } Tusind tak for din hjælp. Venlig hilsen Henrik
29. december 2011 - 17:03
#6
saa smider jeg et svar
Computerworld tilbyder specialiserede kurser i database-management