Ik krijg de volgende fout melding, maar ik weet niet wat het inhoud en hoe ik dit moet oplossen.

Het gaat om de volgende foutmelding:
Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

Heb al zitten google maar krijg nergens duidelijk antwoord op de vraag.
als je je SQL statement zou posten zou dat misschien wel helpen....
Je kan functies als MIN, MAX en COUNT alleen gebruiken als je ook gebruik maakt van Group By
Ik gebruik de volgende query:
<?php
$query_Recordset = "
SELECT *, count(oid)
FROM content
LEFT JOIN (orders)
ON (content.contentid = orders.orderid)
WHERE adddate > '" . date('Y-m-d') . " 00:00:00'";

?>
Jelle - op 09/01/2012 11:37:19

Je kan functies als MIN, MAX en COUNT alleen gebruiken als je ook gebruik maakt van Group By

Dat is niet waar, je kan MIN, MAX, COUNT prima gebruiken zonder group by. Alleen in dat geval wordt de group functie uitgevoerd over alle records.

Dat gezegd hebbende, de foutmelding gaat daar blijkbaar wel over. Ik ken het probleem op zich niet, maar het ziet ernaar uit dat als je een GROUP BY gebruikt je ervan verlost wordt.

Erwin H op 09/01/2012 11:45:57

Dat is niet waar, je kan MIN, MAX, COUNT prima gebruiken zonder group by. Alleen in dat geval wordt de group functie uitgevoerd over alle records.
Dit klopt wel maar is heel erg kort door de bocht en verwarrend voor beginners. TS moet om te beginnen niet SELECT * gebruiken maar zijn attributen benoemen. Vervolgens moet hij kijken of hij ook inderdaad al deze attributen wil groeperen. Nadenken dus over je query, niet zomaar wat GROUP BY toevoegen! @TS: Werk die * eens uit en laat dat zien hier.

Aad B op 09/01/2012 11:54:19

TS moet om te beginnen niet SELECT * gebruiken maar zijn attributen benoemen.

Daar ben ik het uiteraard helemaal mee eens.


WHERE addate > NOW()


Ietsje netter dan het met php oplossen.
Aad B op 09/01/2012 11:54:19

[quote="Erwin H op 09/01/2012 11:45:57"]
Dat is niet waar, je kan MIN, MAX, COUNT prima gebruiken zonder group by. Alleen in dat geval wordt de group functie uitgevoerd over alle records.
Dit klopt wel maar is heel erg kort door de bocht en verwarrend voor beginners. TS moet om te beginnen niet SELECT * gebruiken maar zijn attributen benoemen. Vervolgens moet hij kijken of hij ook inderdaad al deze attributen wil groeperen. Nadenken dus over je query, niet zomaar wat GROUP BY toevoegen! @TS: Werk die * eens uit en laat dat zien hier.
[/quote]

Waarom moet ik die 1 voor 1 benoemen als ik ze allemaal nodig heb, wat is hier de meerwaarden van?


[size=xsmall]Toevoeging op 09/01/2012 12:40:30:[/size]

Smur f op 09/01/2012 12:07:54


WHERE addate > NOW()


Ietsje netter dan het met php oplossen.


Als ik dat doet pakt die ze niet meer vanaf 00:00:00 maar van de tijd die het op dat moment pas is.
De meerwaarde is dat je niet GROUP BY * kan doen, je moet ze dus benoemen. Verder is het raadzaam om altijd je attributen te benoemen, dat geeft minder problemen wanneer je je tabel wijzigt, bijvoorbeeld een veld erbij. SELECT * haalt dan overal meteen dat extra veld op waardoor er veel in je programmatuur aangepast moet worden terwijl je dat extra veld misschien maar in 1 of 2 programma's nodig hebt.
Het is sneller en toekomstbestendiger. Als je later bijvoorbeeld een kolom toevoegt die je helemaal niet nodig hebt krijg je die wel automatisch in je resultset. Als je een kolom een andere naam geeft lijkt er in je SQL statement niets aan het handje (die * werkt nog steeds), maar verderop in je code kan het opeens wel vreemd gedrag gaan vertonen. Terwijl als je alle kolommen benoemt krijg je in elk geval een foutmelding als de kolommen in eens niet meer kloppen.

Reageren