Hallo,
ik ken de ORDER BY al, zo kan je aangeven volgens wat je wil ordenen, maar kan dit ook random?
Dit omdat ik gegevens wil die niet altijd op dezelfde volgorde staan.

Mvg,
Kristof
Ja dat kan via de MySQL functie RAND():

SELECT ...
FROM ...
ORDER BY RAND();

Let alleen wel op dat RAND() notoir traag is. Het is al merkbaar bij een paar duizend record. In een eigen database met een kleine 7000 records heb ik net even gekeken en 10 records ophalen met een random order duurt 0.35 seconden, gesorteerd op een normale kolom 0.00 seconden. Bij enige tienduizenden records wordt het al bijna ondoenlijk.
Is er een manier die wel vlotter loopt?

Ik had namelijk die al gevonden maar had ook al gehoord beter niet met RAND() te doen
Er zijn wel alternatieven met een omweg, maar dan ligt het er een beetje aan wat je wil doen. Wil je bijvoorbeeld 1 random record uit je database halen, dan zou je bijvoorbeeld eerst een count kunnen doen op het totaal, dan in php een random getal bepalen binnen dat totaal en dan met behulp van een LIMIT clause dat specifieke record ophalen. Wil je echter meerdere records dan is dat geen goede optie.
Ik moet ze allemaal hebben, maar in random volgorde, zoals ik begrijp is rand de enige oplossing.
Alle records ophalen uit je database.
Daarna deze in een Array steken.
Daarna even de functie Shuffle toepassen op de array.
Dan heb je een array met alle elementen in willekeurige volgorde.
Kristof Hendrickx op 17/11/2013 18:54:43

Ik moet ze allemaal hebben, maar in random volgorde, zoals ik begrijp is rand de enige oplossing.

Dan lijkt me dat je een ander probleem hebt. Ofwel je kan gewoon RAND() gebruiken omdat het aantal records niet erg groot is. Ofwel je kan RAND() niet gebruiken omdat het te traag is, maar dan kan je ze ook niet allemaal op je pagina tonen. Je gaat neem ik tenminste aan niet 10.000 of meer records op je pagina tonen.

Dus nogmaals, wat wil je nu?

Zou dit vlugger kunnen werken?

SELECT RAND() as random_getal, ...
FROM ...
ORDER BY random_getal;

Reageren