MySQL: Random record

November 5th, 2007 by Bert

Dit is de manier om een random record te nemen uit een table in MySQL.
select * from banners order by rand() limit 1

Update: Het voorstel van Frank in de reacties is veel beter.

Technorati , ,

5 Responses to “MySQL: Random record”

  1. Steven Verbruggen says:

    In een MSSQL database doe je dat als volgt “.. order by NEWID()”

  2. Frank says:

    Denk er wel aan dat dit een gigantische performance killer is als je tabel groot is! Vaak ben je dan beter om select een_of_andere_key_van_die_tabel from banners te doen (dit is een select van een index, dus gaat snel) en je array te randomizen in je applicatie, en dan dat record te selecteren.

  3. Steven Verbruggen says:

    Dat zit native in de database engine om random te sorteren. Is dus volgens mij het snelste wat je kan hebben hoor ..

  4. Bert says:

    Het voorstel van frank is dus veel beter.

  5. Gijs (digital base) says:

    Inderdaad rand() is niet echt snel op grote datasets (ook afhankelijk van je database uiteraard). Een lelijke, maar wel betere oplossing is de volgende :

    SELECT * FROM Table T JOIN (SELECT FLOOR(MAX(ID)*RAND()) AS ID FROM Table) AS x ON T.ID >= x.ID LIMIT 1;

Leave a Reply