Autor | Zpráva | ||
---|---|---|---|
gaminn Profil * |
#1 · Zasláno: 1. 3. 2007, 16:04:00
Zdravím,
v dotazu mám klauzuli GROUP BY a chtěl bych z agregovaného sloupce vybrat náhodnou hodnotu (stejným způsobem jako MIN() vybere nejmenší, MAX() největší...). Existuje něco takového? |
||
gaminn Profil * |
#2 · Zasláno: 1. 3. 2007, 16:36:47
Tak by to podle mě šlo tak, že omezím záznamy z tabulky přilepované pomocí LEFT JOIN:
SELECT * FROM hlavni_tabulka LEFT JOIN tabulka ON tabulka.id = (SELECT id FROM tabulka WHERE hlavni_id = hlavni_tabulka.id ORDER BY RAND() LIMIT 1) WHERE hlavni_tabulka.id = 1 Bohužel taková konstrukce funguje jen "někdy", opravdu náhodně. Někdy dotaz vrátí třeba i tři záznamy (k čemuž by logicky dojít nikdy nemělo - všechna id jsou PRIMARY KEY), někdy vrátí jen data z hlavni_tabulka, někdy vrátí vše tak, jak má. Pokud ze subselectu oddělám ORDER BY RAND(), vše funguje perfektně (samozřejmě až na to, že nedochází k přilepení náhodného záznamu pomocí LEFT JOIN, ale jen jednoho pevně stanoveného). Samotný subselect jsem testoval (bez klauzule WHERE) a funguje dobře, vždy vrátí jeden náhodný záznam. Moc nechápu, jak je možné, že celý konstrukce nefunguje.... |
||
Kajman_ Profil * |
#3 · Zasláno: 1. 3. 2007, 20:53:38
možná by to mohlo jít takhle nějak
SELECT a.sloupec, (select jiny_sloupec from tabulka b where a.sloupec=b.sloupec order by rand() limit 1) jiny_sloupec FROM tabulka a group by a.sloupec; ale rychlé to asi nebude a možná to jde lépe |
||
gaminn Profil * |
#4 · Zasláno: 2. 3. 2007, 10:41:31
Udělal jsem to tak, že (select jiny_sloupec from tabulka b where a.sloupec=b.sloupec order by rand() limit 1) jsem dal do klauzule FROM, na to pak nalepuji další tabulky.... Zajímalo by mě ale, proč ten první způsob, se subselectem v left join nefunguje.
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0