Bekijk Volledige Versie : Mysql kan niet sorteren
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?
Zonder limit werkt het wel.
Maar dan selecteer ik wel enorm veel records...
Zet de LIMIT eens voor je ORDER BY.
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 ..
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
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?
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.
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:
Niet erg Ramon ;) Iig goed dat het prob is opgelost :)
Ramon Fincken
23/08/07, 23:24
gheghe zie rep ;)
Rfn
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.
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... :(
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.
je kunt ook de quotes rond id weglaten
Eigenlijk overal kun je die backquotes weglaten, behalve als de veld- en tabelnamen speciale Mysql-variabelen zijn (zoals key, sum).