GROUP columns foutmelding
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....
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?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'";
?>
$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:
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.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.
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.
Aad B op 09/01/2012 11:54:19:
Erwin H op 09/01/2012 11:45:57:
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.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.
Waarom moet ik die 1 voor 1 benoemen als ik ze allemaal nodig heb, wat is hier de meerwaarden van?
Toevoeging op 09/01/2012 12:40:30:
Smur f op 09/01/2012 12:07:54:
Als ik dat doet pakt die ze niet meer vanaf 00:00:00 maar van de tijd die het op dat moment pas is.
Gewijzigd op 09/01/2012 12:39:33 door Kees -
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.
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.
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.
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.
Het is heel simpel, als je in je Query geen normale kolommen selecteert en alleen aggegrate functions uitvoert dan is het zonder group by geen probleem.
Officieel hoor je op ELK kolom wat niet aggegrate is te defineren in je GROUP BY. Voorbeeld:
Code (php)
1
SELECT username, place, SUM(o.totalAmount) FROM user INNER JOIN orders o ON(orderid) GROUP BY username, place
Maar omdat mysql niet zo strict is kan dit ook:
Code (php)
1
SELECT username, place, SUM(o.totalAmount) FROM user INNER JOIN orders o ON(orderid) GROUP BY username
Maar kan wel vreemde resultaten opleveren. Het beste is dus om alle kolommen mee te pakken.
Dank voor de uitleg weer wat geleerd. Ga dit dan maar even allemaal aanpassen:)