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?
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'
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 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.