Jak nejefektivněji vybrat náhodné položky z databáze mysql.
Spousta neznalců databázových funkcí (opět a zase konkrétně mysql) používá strašný způsob výpisu náhodných dat z databáze.
Nejhorší varianta
Vytáhnout všechny hodnoty do pole, spočítat kolik jich je, a poté
generovat náhodné číslo 0 – max, kterým zjistíme index
náhodné položky. Nikdy prosím
.
Stále špatně…
Lepší varianta spočívá ve zjištění náhodného id, a pak provedeme dotaz na konkrétní id záznamu. Toto řešení má dvě nevýhody – jednak tam kde není id moc nezmůžeme a hlavně – většinou nemůžeme zajistit kontinuálnost jednotlivých id v databázi. Proto bychom většinou museli zjišťovat, zda záznam o vygenerovaném id existuje, a pokud ne, provést generování znovu. Opět mamutí řešení.
Efektivně, jeden sql dotaz
A přitom to jde tak snadno… Není nic jednoduššího, než použít funkci Rand() v ORDER klauzuli společně s LIMITem. Příklad pro jeden náhodný záznam z databáze:
SELECT nazev FROM tab ORDER BY rand() LIMIT 1
Jak prosté…





nahoru