pifova homepage

PIF

thats pif

RSSgood

rss is good
Rss webu

LastWork

last work yea

Workin'on

  • moraviawood.cz
  • marka-at.cz
  • PWAPI ESHOP
  • krasnezeny.cz
  • Provison v2.0

GetBored!

Rychly tip pro náhodný výběr z mysql

22nd March 2k5 5==17pm

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é…

Komentáře

#[1] Yetty

16th July 2k9 1<59pm Yetty's siet

Pěkné, přesně to jsem hledal…

#[2] kazlik

28th July 2k9 2<34pm

taky mi to pomohlo. Díky

#[3] Jan Turoň

20th October 2k9 12<30pm Jan Turoň's siet

Ahoj, tvá varianta „Efektivně“ je sice syntakticky krátká, ale v dlouhých tabulkách časově velmi náročná, viz http://www.greg­gdev.com/…arti­cles.php?id=6

Pokud chceme z nějaké tabulky vybírat náhodný záznam, je efektivnější dát si práci a zajistit kontinuálnost řady primárního klíče.

Na úrovni mých znalostí mi přijde nejefektivnější napsat si uloženou proceduru, k dispozici je na mých stránkách na http://eshop-expander.cz/…l-random-row

PS: Většina mnohem kompetentnějších lidí než my by si na pyšné a samolibé výrazy stylu „nikdy prosím“, „mamutí řešení“, „jak prosté“ nikdy netroufla: mají zkušenost, že když si člověk přečte svůj článek s odstupem času, kdy jsou jeho profesní obzory mnohem širší a najde tam podobná slova, nejraději by se zahrabal hanbou. Snad to nevyznělo jako útok, hodně zdaru :o)

#[4] PIF

20th October 2k9 12<50pm

Dekuji za doplneni, prece jenom uz je to nejaky cas, co tenhle clanek vznikl, nicmene pro vetsinu tabulek je to dost pohoda.

Kdyz je nejaky kontinentualni klic, tak proc ne, rovnou rand na generovani id a bouchame sql where id=xy x)

Přidat komentář

Komentáře jsou formátovány texy formátovačem. Můžete využít i služby gravatar.com

Jméno:
Email: nikdy nebude zveřejňován
Web:
Pamatovat si údaje? Ano
Text:
Opište prosím text z obrázku

up nahoru