PDA

Bekijk Volledige Versie : Mysql kan niet sorteren



klasje.be
23/08/07, 20:13
Deze code selecteert de laatste 20 regels uit de database en toont ze in de updateslijst:
SELECT * FROM `updates` ORDER BY `id` DESC LIMIT 20

Sinds ik ben overgegaan naar een nieuwe server doet dit het echter niet meer, hij toont nu gewoon de eerste 20, en trekt zich niets aan van het sorteren.


Hoe kan dit en wat doe ik fout? Is er soms iets veranderd in mysql met de nieuwste versies?

Ramon Fincken
23/08/07, 20:21
vreemd ... laat de limit eens weg en kijk es of he dan OOK nog zo is?

klasje.be
23/08/07, 20:24
Zonder limit werkt het wel.
Maar dan selecteer ik wel enorm veel records...

TiMMiEJ
23/08/07, 20:35
Zet de LIMIT eens voor je ORDER BY.

Str@nger
23/08/07, 20:37
En probeer eens LIMIT 0,20?

Ramon Fincken
23/08/07, 21:01
limit dient bij mijn weten als laatste te komen, en limit 0, 20 doet
een start bij row 0 tot hij 20 records heeft gevonden, die gaat dus zeker niet bij de laatste rows komen ..

klasje.be
23/08/07, 21:10
Idd, werkt ook niet.
Hoe kan dit :s

MySQL client version: 5.0.32
Server versie: 5.0.32-Debian_7etch1-log
Protocol version: 10

Str@nger
23/08/07, 21:20
Ehm, SELECT ... ORDER BY ... LIMIT 0,20 ==> eerst worden de gevonden rijen gesorteerd, van deze gesorteerde lijst worden rij 0 t/m 19 (20 rijen dus) geselecteerd.

Voer je deze code uit via een tool als phpmyadmin of in je eigen code?
Indien het laatste: probeer het ook eens met een db-admin-tool?

klasje.be
23/08/07, 21:34
LIMIT 0,20 was inderdaad de juiste oplossing.
Gek dat hij het nu opeens wel doet.
Ik ben wel overgeschakeld van id naar time, dat hij op het uur sorteert.

Gek dat hij id niet kan sorteren, is nochtans auto increment.

Str@nger
23/08/07, 21:42
Volgens mij interpreteert jouw Mysql 5-versie LIMIT 20 niet zoals mysql 4 LIMIT 0,20...

Blij dat het wel opgelost is :)

Ramon Fincken
23/08/07, 22:33
Ehm, SELECT ... ORDER BY ... LIMIT 0,20 ==> eerst worden de gevonden rijen gesorteerd, van deze gesorteerde lijst worden rij 0 t/m 19 (20 rijen dus) geselecteerd.

Voer je deze code uit via een tool als phpmyadmin of in je eigen code?
Indien het laatste: probeer het ook eens met een db-admin-tool?

potverdrie , zat ik er naast ... :lovewht:

Str@nger
23/08/07, 23:15
Niet erg Ramon ;) Iig goed dat het prob is opgelost :)

Ramon Fincken
23/08/07, 23:24
gheghe zie rep ;)

Rfn

wonko
24/08/07, 07:43
LIMIT 0,20 was inderdaad de juiste oplossing.
Gek dat hij het nu opeens wel doet.
Ik ben wel overgeschakeld van id naar time, dat hij op het uur sorteert.

Gek dat hij id niet kan sorteren, is nochtans auto increment.

Controleer even dat je indexen nog goed zijn, en herbouw deze indien dit niet het geval is. Hij gebruikt indexen voor sortering, en als die fout zijn, dan gaat de sortering fout lopen.

klasje.be
24/08/07, 16:09
De nieuwe mysql doet soms echt gekke dingen:

Dit werkt niet:
SELECT * FROM `[updates]` WHERE gameid='$gameid' ORDER BY 'id' DESC LIMIT 20

Dit werkt wel:
SELECT * FROM `[updates]` WHERE gameid='$gameid' ORDER BY `id` DESC LIMIT 20

Ik vermoed dat ` nu verplicht is geworden.

Wel stom dat zend development environment (mijn script programma) dit tekentje niet aankan. Als ik ` typ, geeft hij niets weer in het programma... :(

jurrian
24/08/07, 16:24
Dit werkt niet:
SELECT * FROM `[updates]` WHERE gameid='$gameid' ORDER BY 'id' DESC LIMIT 20

Dit werkt wel:
SELECT * FROM `[updates]` WHERE gameid='$gameid' ORDER BY `id` DESC LIMIT 20


Nee, je maakt een fout. In de eerste zet je het tussen normale quotes, wat aangeeft dat iets een string is. Ieder record krijgt dus de waarde 'id' om op gosorteert te worden. Bij de tweede gebruik je backquotes, die dienen om veld- en tabelnamen af te schermen. Hierbij neemt het ORDER BY-proces de waarde uit de variable 'id' en niet de text-waarde 'id'.

Dat is niet nieuw in MySQL 5, dat was ook in vorige versies al.

t.bloo
24/08/07, 16:39
je kunt ook de quotes rond id weglaten

Str@nger
24/08/07, 16:51
Eigenlijk overal kun je die backquotes weglaten, behalve als de veld- en tabelnamen speciale Mysql-variabelen zijn (zoals key, sum).