Ik heb de volgende query:


$q = 'SELECT MAX(week) as laatste FROM uren_2015
WHERE id_gebruiker = '.$_SESSION['id'].' AND gesloten = 1
LIMIT 1';

$r = mysqli_query($my_connection,$q) or die(mysqli_error($my_connection));
$aantal = mysqli_num_rows($r);


Ik weet 100% zeker dat er in de hele tabel geen enkel record voor komt met de waarde "1" voor "gesloten".

Toch krijg ik steeds een één terug voor het aantal gevonden records.
Heeft dit iets te maken met de MAX() functie ? Met de Limit 1 ?

Ik zou graag gewoon een aantal van nul terug krijgen wanneer er geen enkel record voldoet aan de WHERE voorwaarden.
Misschien gedraagt de query zich wel zoals je zou verwachten als je GROUP BY id_gebruiker oid gebruikt ipv LIMIT? In dat geval krijg je wss geen resultaten als niet aan de voorwaarden is voldaan.
Max is een aggregate functie die inderdaad één rij terug zal geven indien je de bijhorende GROUP BY achterwege laat.
Waarschijnlijk heeft laatste dan een waarde NULL? LIMIT heeft dan ook geen toegevoegde waarde. Ik denk dat je toch gewoon de ene rij die hij teruggeeft moet fetchen en dan de waarde van laatste moet vergelijken.
Ik ben begonnen om de limit weg te halen aangeien de MAX() nooit meer dan één record terug zal geven.

Het is mij nog niet geheel duidelijk waarom/waardoor maar door toevoeging van GROUP BY werkt het wel naar behoren.

Bedankt voor het meedenken.
Een aggregate functie zonder group by geeft altijd 1 record terug, dus de limit heeft sowieso geen zin.
Maar als je een group by doet op een kolom waarvan de waarde niet bestaat in de tabel, valt er niets te groeperen dus krijg je nul riecords.

Je kan dit een beetje vergelijken met left joins, als je aggegrate functies hebt op een tabel na de left join, krijg bij allemaal (behalve count) NULL.

Reageren