In mijn tabel heb ik op een aantal regels NULL staan. Verder staan er allemaal getallen in. Als ik met de onderstaande query de laagste waarde in een kolom opvraag geeft hij een leeg resultaat (geen nul). Ik wil echter het laagste getal uit de kolom hebben en hij moet de NULL regels dus overslaan. Hoe doe ik dit?

<?php
$LowTemp = mysql_query("SELECT LowTemp, DATE_FORMAT(Time, '%H:%i') AS shorttime FROM weerdata WHERE Date='$date' ORDER BY LowTemp, Time ASC LIMIT 1");
if ($LowTemp) {
$LowTemp_result = mysql_fetch_assoc($LowTemp);
echo "<td>" . $LowTemp_result['LowTemp'] . "</td><td>" . $LowTemp_result['shorttime'] . $Time . "</td>";
}
?>
SELECT
MIN(LowTemp) AS laagste_temp,
DATE_FORMAT(Time, '%H:%i') AS shorttime
FROM
weerdata
WHERE
Date='".$date."'
GROUP BY
MIN(LowTemp)
HAVING
MIN(LowTemp) IS NOT NULL
ORDER BY
LowTemp, Time ASC LIMIT 1

zo??
Nee, werkt niet...

Wat doet "HAVING" ? Wanneer ik MIN(LowTemp) gebruik (zonder ORDER BY etc) geeft hij inderdaad de laagste waarde van LowTemp. Maar ik kan op de een of andere manier dan de bijbehorende tijd niet met dezelfde query opvragen. Kan dat wel? Of moet ik daarvoor een ieuwe query gebruiken?

Dit is nu de (niet werkende) selectquery: SELECT MIN(LowTemp) AS low_temp, DATE_FORMAT(Time, '%H:%i') AS shorttime FROM weerdata WHERE Date='$date'
De voorgestelde query gaat niet werken omdat alleen de minimale waarde geselecteerd wordt en er dus niets gesorteerd hoeft te worden.

Wat je kunt doen is in je originele query uit je openingspost toevoegen: AND LowTemp IS NOT NULL (achter je eerste WHERE clause).

Reageren