Hallo,

Ik heb een probleempje met mijn query:

Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

Dit is de query:
<?php
$res = mysql_query("SELECT COUNT(ID),
COUNTRY,
ENTRY,
EMAIL,
HIDEEMAIL,
MATCH( COUNTRY, ENTRY ) AGAINST ( '$searchstring' ) AS score
FROM
VGB_ENTRY
WHERE
MATCH( COUNTRY, ENTRY ) AGAINST ( '$searchstring' IN BOOLEAN MODE)
AND unmoderated = 0
ORDER BY
score DESC") or die("res:". mysql_error());
return mysql_result($res, 0, "count(ID)");
?>

Maar ik denk niet dat het aan de query ligt, maar aan mijn database: wat moet ik doen om deze error op te lossen?

Alvast bedankt!
Maar ik denk niet dat het aan de query ligt
En dan de database foutmelding:
Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Ik weet wel heel zeker dat het wél aan de query ligt! ;)

Waarom? Omdat de database dat zegt!

COUNT() is een agregate functie, die eist dus een GROUP BY wanneer je meer dan alleen het resultaat van de count opvraagt.

En het is al vaker gezegd, jouw SQL ziet er niet uit! Gebruik in vredesnaam nooit hoofdletters voor kolom- en/of tabelnamen. Dat maakt de query vrijwel onleesbaar en dus niet te debuggen en/of te onderhouden.

SELECT
  kolomnaam
FROM
  tabelnaam
WHERE
  kolomnaam = 'waarde'

Zo moeilijk is het niet!

Edit: GROUP BY-uitleg en gebruik
Ik heb deze tut is gelezen:
http://www.phphulp.nl/php/tutorials/3/521/1298/
En ik snap het GROUP BY gedeelte, dus ik ga eens een FULLTEXT index op HIDEEMAIL zetten, en als die foutmelding dan nog steeds weergeven wordt, dan geef ik wel een EDIT:
Wat heeft FULLTEXT met GROUP BY te maken?
Nog een keertje gekeken:
COUNTRY = FULLTEXT
ENTRY = FULLTEXT
EMAIL = normaal text
HIDEEMAIL = 0 of 1.

Wat moet ik dan met GROUP BY doen om het probleem op te lossen?

EDIT: zoals je ziet gebruik ik nu ORDER BY, als ik GROUP BY zou gebruiken, wat is dan het verschil?
Wat heeft ORDER BY met GROUP BY te maken? Niets, net zo min als FULLTEXT en GROUP BY niks met elkaar te maken hebben.

Wanneer jij een agregate functie in de query wilt gebruiken, bv. COUNT(), dan zul je alle velden die jij opvraagt, bv. country en email, in de GROUP BY moeten vermelden. Doe je dat niet, krijg je een foutmelding (het is te hopen!) of een resultaat waar geen donder van klopt (heeft MySQL een handje van).

Maar ga je eens verdiepen in de agregate functies, dan snap je ook waaróm je GROUP BY moet gebruiken. Dat is belangrijker dan dat jouw huidige probleem is opgelost.

Reageren