Autor Zpráva
xlifer
Profil
Jakým způsobem je možné řešit náhodný výběr záznamů z MySQL tabulky?

Našel jsem docela zajímavé řešení, ale rád bych znal názor zkušenějších zda nelze situaci řešit třeba i jinak (lépe).

www.rndblog.com/how-to-select-random-rows-in-mysql/

Co jsem pochopil z příkladu, tak použití výběru pomocí ORDER BY RAND() se nedoporučuje z hlediska velké zátěže.
pcmanik
Profil
Ina moznost na strane mysql nieje.

Zrejme pouzivas php a na oznacovanie stlpcov id, tak si v php vygeneruj nahodne cisla, a potom daj dotaz do db, ktory ti selectne podla tych id.
xlifer
Profil
pcmanik:

Tohle jsem měl v plánu taky jako možnost...

Nicměně se ješte zeptám co přesně znamená NOW() v MySQL ?:

ORDER BY RAND(NOW());


Z manuálu kde jsem našel tento tip jsem to nepochopil...

TIP:

SELECT * FROM foo ORDER BY RAND (NOW ()) LIMIT 1;
pcmanik
Profil
NOW() ti da aktualny cas, skus sa nabuduce pozret na oficialnu dokumentaciu
Resp, staci ked kliknes rovno na to na tomto fore.
xlifer
Profil
pcmanik:

Právě, že jsem se díval do oficiální dokumentace, ale asi špatně... Díky za info.

A hlavní rozdíl je jaký když použiju RAND() nebo RAND(NOW())
Zkouším to, ale rozdíl mi není jasný...
Kajman_
Profil *
U hodně řádků může být lepší jiný přístup...
http://diskuse.jakpsatweb.cz/?action=vthread&forum=28&topic=76668#12

Nebo v případě, že chcete jen jeden řádek, použít náhodný limit (musíte znát přibližný počet řádků tabulky) - ten v kombinaci s řazením podle primárního klíče může být také rychlejší než obyčejné order by rand.

Kde přesně v manuálu doporučovali verzi s now?
Tori
Profil
Kajman
Je to jen v komentářích, ne ofišo text:
Radek XT
Profil *
Já to vyřešil druhou "temporary" tabulkou. Mám tam všechny záznamy seřazené od 1 do xxx a pak jen vyberu náhodné číslo a je to. Má to tu výhodu, že do temporary tabulky si dám např. 500nej položek a vybírám jen z nich. Temporary tabulku obnovím každý den v ranních hodinách, zátěž na server minimální.
xlifer
Profil
Radek XT:

Taky zajimavé řešení. Akorát ja měl za to, že temporary tabulka se vytvoří v rámci spojení a jakmile je uzavřeno, tak se smaže?
Radek XT
Profil *
Proto jsem ji dal do uvozovek - je to klasická tabulka. Ale každý den se vyprázdní a znovu zaplní.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0