Autor Zpráva
budik
Profil *
Zdravim,

v soucasne dobe mam toto:
select x from tabulka where pozice=1 ORDER BY RAND() LIMIT 1

select x from tabulka where pozice=2 ORDER BY RAND() LIMIT 1

select x from tabulka where pozice=3 ORDER BY RAND() LIMIT 1


tzn. 3 dotazy. Slo by nejak pouzit jeden dotaz, ktery vybere ke kazde pozici nahodne data?
Kajman_
Profil *
Pokud znáte všechny pozice, tak stačí ty selecty zazávorkovat a dát mezi ně
union all
budik
Profil *
pozice znam vsechny tedy 1,2,3 mohl by jste mi to prosim napsat jak to myslite? Zkusil jsem (select x from tabulka where pozice=1) union (select x from tabulka where pozice=2) union .... ORDER BY RAND() LIMIT 3 ale to jaksi neni ono
budik
Profil *
nebo to ma byt (SELECT x from xx where pozice=1 order by rand()) union ....
Kajman_
Profil *
Podku vracíte sloupců, tak výsledek bude ve více řádcích

(select x from tabulka where pozice=1 ORDER BY RAND() LIMIT 1)
union all
(select x from tabulka where pozice=2 ORDER BY RAND() LIMIT 1)
union all
(select x from tabulka where pozice=3 ORDER BY RAND() LIMIT 1)

Pokud jen jeden, tak si můžete udělat i dotaz takovýto

select
(select x from tabulka where pozice=1 ORDER BY RAND() LIMIT 1) p1,
(select x from tabulka where pozice=2 ORDER BY RAND() LIMIT 1) p2,
(select x from tabulka where pozice=3 ORDER BY RAND() LIMIT 1) p3
from dual
budik
Profil *
jeste mam jeden dotaz jakej ma vyznam to union ALL - protoze mi to jde i bez toho all
Kajman_
Profil *
bez all to může nepřidat řádke, pokud už takový je z minula, při all se přidá vždy (a nemusí se kontrolovat), zkuste si obě varianty

select 'x' from dual
union -- all
select 'x' from dual

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: