Zadejte hledaný výraz...

Náhodný výběr z více tabulek

Multimotyl
verified
rating uzivatele
(7 hodnocení)
9. 10. 2012 16:39:02
Ahoj, potřebuju tahat náhodná data z DB v páru ze dvou různých tabulek.
V tabulce xxx je vždy unikátní řádek, ke kterému je několik řádků v yyy.
SELECT xxx.text, yyy.text
FROM xxx, yyy
WHERE xxx.id = yyy.xxxId
ORDER BY RAND() LIMIT 1
Mi vytáhne náhodný řádek z xxx, ale z yyy furt ten stejnej. Dá se to nějak zaonačit? Na webu neumím najít odpověď.
9. 10. 2012 16:39:02
https://webtrh.cz/diskuse/nahodny-vyber-z-vice-tabulek#reply817719
Petr Zachrdla
verified
rating uzivatele
(1 hodnocení)
9. 10. 2012 16:53:51
SELECT * FROM xxx INNER JOIN yyy ON xxx.id = yyy.xxx_id WHERE xxx.id IN (SELECT id FROM xxx ORDER BY RAND() LIMIT 1)
bez ověření ;o)
EDIT: případně jestli chceš i náhodně výsledek z yyy s limitem, tak
SELECT * FROM yyy WHERE yyy.xxx_id IN (SELECT id FROM xxx ORDER BY RAND() LIMIT 1) ORDER BY RAND() LIMIT 1
9. 10. 2012 16:53:51
https://webtrh.cz/diskuse/nahodny-vyber-z-vice-tabulek#reply817718
Multimotyl
verified
rating uzivatele
(7 hodnocení)
9. 10. 2012 17:07:01
Sakryš :-D
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery
co robit :-D
9. 10. 2012 17:07:01
https://webtrh.cz/diskuse/nahodny-vyber-z-vice-tabulek#reply817717
Vít Michalek
verified
rating uzivatele
(14 hodnocení)
9. 10. 2012 17:09:36
Jednoduché - zvýšit verzi MySQL :)
9. 10. 2012 17:09:36
https://webtrh.cz/diskuse/nahodny-vyber-z-vice-tabulek#reply817716
Petr Zachrdla
verified
rating uzivatele
(1 hodnocení)
9. 10. 2012 17:29:34
Jsem rád, že používám PgSQL ;o) Zkus tam udělat takovou haluz.
SELECT * FROM xxx INNER JOIN yyy ON xxx.id = yyy.xxx_id WHERE xxx.id IN (SELECT * FROM (SELECT id FROM xxx ORDER BY RAND() LIMIT 1))
9. 10. 2012 17:29:34
https://webtrh.cz/diskuse/nahodny-vyber-z-vice-tabulek#reply817715
Mimochodem, RAND() je hrozně neefektivní.
9. 10. 2012 18:40:03
https://webtrh.cz/diskuse/nahodny-vyber-z-vice-tabulek#reply817714
Petr Zachrdla
verified
rating uzivatele
(1 hodnocení)
9. 10. 2012 18:49:35
Napsal matoni555;854578
Mimochodem, RAND() je hrozně neefektivní.
Tak vybal lepší řešení.
9. 10. 2012 18:49:35
https://webtrh.cz/diskuse/nahodny-vyber-z-vice-tabulek#reply817713
FAKAM
verified
rating uzivatele
(10 hodnocení)
9. 10. 2012 19:25:39
Napsal matoni555;854578
Mimochodem, RAND() je hrozně neefektivní.
Prečo?
9. 10. 2012 19:25:39
https://webtrh.cz/diskuse/nahodny-vyber-z-vice-tabulek#reply817712
Petr Zachrdla
verified
rating uzivatele
(1 hodnocení)
9. 10. 2012 20:11:15
Napsal FAKAM;854597
Prečo?
Myslím, že se odpověď nedovíme, protože neexistuje. Buď to bude generovat na aplikační vrstvě a pak přibudou režijní náklady s rizikem, že v číselné řadě někdo smazal jedno ID, nebo se nás bude snažit přesvědčit, že bychom to měli řešit bez RAND, které je pomalejší než prostý select, i přes to, že to může být pro nějakou fci důležité.
Jako bych si vzpomněl na dobu, kdy se začal dělat tabulkový layout do DIV a kdo tam použil TABLE (třeba technická tabulka s parametry), byl považován za kodéra, který používá nečisté techniky.
matoni555, jednou to tam někdo u Oracle naprogramoval, tak to asi nebude úplně k ničemu.
9. 10. 2012 20:11:15
https://webtrh.cz/diskuse/nahodny-vyber-z-vice-tabulek#reply817711
Multimotyl
verified
rating uzivatele
(7 hodnocení)
9. 10. 2012 23:06:06
Napsal matoni555;854578
Mimochodem, RAND() je hrozně neefektivní.
To vím, ale půjde o jednotky dotazů za hodinu v tabulce do pár tisíc řádků, takže nemám důvod si to komplikovat.
9. 10. 2012 23:06:06
https://webtrh.cz/diskuse/nahodny-vyber-z-vice-tabulek#reply817710
Pro odpověď se přihlašte.
Přihlásit