Avatar billede jwwd Nybegynder
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
Avatar billede arne_v Ekspert
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.
Avatar billede jwwd Nybegynder
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
Avatar billede arne_v Ekspert
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");
Avatar billede jwwd Nybegynder
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
Avatar billede jwwd Nybegynder
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
Avatar billede arne_v Ekspert
29. december 2011 - 17:03 #6
saa smider jeg et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester