Zdravím,
poradil by mi prosím někdo, jak z tabulky, o 100 řádcích, vytáhnout náhodně 50?
Našel jsem něco jako:
ORDER BY RAND()
A dočetl jsem se, že pro větší množství řádků, je to "zlo". Díky předem.
Asi 5-10 min googlovani. Jak dlouho to trvalo tobe?
http://diskuse.jakpsatweb.cz/?…
http://diskuse.jakpsatweb.cz/?…
SELECT * FROM jmena ORDER BY RAND() LIMIT 3
---
SELECT .... WHERE id IN (123,321,456,654,789,987, ... ,11) LIMIT 3
Vygenerovat 30 náhodných čísel trvá chvíli (v porovnání s 10k). A nemusí se to podle nich řadit.
---
Náhodné číslo ve zvoleném intervalu ti vrátí funkce rand().
Náhodný výběr z explicitně daných hodnot pak nejlépe pomocí array_rand().
---
ORDER BY RAND(NOW());
SELECT * FROM foo ORDER BY RAND (NOW ()) LIMIT 1;
---
mohu mít otázku? v čem je lepší vložený dotaz?
select * from fotky where id in (select id from fotky order by rand() limit 1)
vs.
select adresa, popis from fotky order by rand() limit 1
-> http://dev.mysql.com/…ization.html
---
Zkusil jsem to na tabulce, co má lehce přes milion záznamů, a rozdíl tam je...
select * from protokoly_data_pol p order by rand() limit 10
--15 s
select p.* from protokoly_data_pol p, (select p2.vid, p2.pol_id from protokoly_data_pol p2 order by rand() limit 10) p3 where p.vid=p3.vid and p.pol_id=p3.pol_id;
--1.5 s
Podle explain, druhý opravdu použije primární index a řadí hodnoty z něho.
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku