ugrás a tartalomhoz

Lekérdezés MySQL 5-ben jó MySQL4-ben már nem.

Anonymous · 2006. Nov. 29. (Sze), 18.08
Adott az alábbi lekérdezés:
SELECT szavazat FROM szavazatok WHERE ido>'2006-11-28 17:08:13' GROUP BY (szavazat) ORDER BY COUNT(*) DESC, ido DESC LIMIT 10;
Ez a lekérdezés MySQL 5 alatt szépen sorrendbe rakja a mai szavazatokat a szavazatok száma és a szavazat frissessége szerint csökkenő sorrendben.
MySQL 4 alatt viszont az alábbi hibaüzenetet adja:
#1111 - Invalid use of group function

Mi lehet a probléma?
 
1

Hibás SQL

Rici · 2006. Nov. 29. (Sze), 20.02
Az SQL lekérdezésedben hiba van, igazából a MySQL 5 nem csinál valamit rendesen, ha engedi lefuttatni.

Nem érthető, hogy hogyan akarsz `ido` szerint rendezni, ha már egyszer csoportosítottál `szavazat` szerint. A csoportosítás után már eltűnik az `ido` oszlop. A rendezés pedig a csoportosítás után történne.

ORDER BY mögött csak olyan kifejezés állhat, ami vagy szerepelt a GROUP BY mögött, vagy pedig egy aggregátum (mint pl. a COUNT, MAX stb).
2

esetleg így?

sotetbarna · 2006. Nov. 29. (Sze), 21.38

SELECT szavazat, count(*) as db FROM szavazatok WHERE ido>'2006-11-28 17:08:13' GROUP BY szavazat ORDER BY db DESC, ido DESC LIMIT 10;
3

Köszi

Anonymous · 2006. Nov. 29. (Sze), 22.44
Kösz, ez már használható - csak az a furcsa, hogy mind külön telepített MySQL 5, mind XAMMP csomagban levő MySQL, mind a MS ACCESS elfogadta a témanyitó hozzászólásban közölt lekérdezést.
4

Biztos?

Rici · 2006. Nov. 29. (Sze), 23.58
Most direkt kipróbáltam, mert elég határozottan állítod, hogy ez működik Access alatt. Pedig nem. És az Access ráadásul értelmes hibaüzenet ad: "Egy olyan lekérdezést próbált végrehajtani, amely nem tartalmazza a megadott kifejezést egy összesítő függvény részeként."

Ne gondold, hogy mindenképpen vitatkozni akarok vagy ilyesmi, de szeretek utánajárni az igazságnak.

Amúgy MySQL bizonyos verziói alatt azért működhet a dolog, mert a MySQL tartalmaz egy nem szabványos bővítést: http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-fields.html. De ahogy a leírásból kivehető, csak akkor van értelme a dolognak, és akkor működik normálisan, ha olyan mezőket hagysz ki a GROUP BY-ból és használsz a SELECT-ben valahol máshol, amik funkcionálisan függenek a GROUP BY-ban szereplő mezőktől.
5

MS ACCESS

Anonymous · 2006. Nov. 30. (Cs), 14.08
Bizonyíték

A lekérdezés:
SELECT zene
FROM szavazatok
GROUP BY zene
ORDER BY Count(*) DESC;
7

Hehe

Rici · 2006. Nov. 30. (Cs), 16.47
Ez nem az SQL lekérdezés. Ugyanis van egy lényeges különbség: ebben nem akarsz rendezni egy másik oszlop, mondjuk `ido` szerint. Így nyilván működik.
6

MySQL in XAMMP

Anonymous · 2006. Nov. 30. (Cs), 14.30
Bizonyíték - tábla adatai ugyanazok.
xampp-win32-1.5.3a