Autor Zpráva
Kamil Papica
Profil *
Zdravím Vás,
je možné spojiť 3 SELECTy cez UNION tak, aby boli SELECTy zoradené náhodne?

Ako príklad uvediem tabuľku (ALBUMS): ID, NAME, YEAR, DESCRIPTION.
Mojim cieľom je získať záznamy z tabuľky albums tak, aby boli rozdelené na 3 skupiny:

má "YEAR" A ZAROVEN ma "DESCRIPTION" (zoradené náhodne)
+
má buď "YEAR" ALEBO "DESCRIPTION" (zoradené náhodne)
+
nemá ani "YEAR" ANI "DESCRIPTION" (zoradené náhodne)

čiže výsledok by mal byť nejak takto:
7, meno albumu 7, 1988, toto je skvelý album
1, meno alnumu 1, 2012, nestojí za reč
4, meno albumu 4, 2015,
9, meno albumu 9, 2014,
2, meno albumu 2, , odporúčam
5, meno albumu 5, ,
3, meno albumu 3, ,
6, meno albumu 6, ,

Zvolil som preto spojenie cez UNION:
SELECT *
FROM
(
    (
    SELECT id,name,year,description FROM albums WHERE year != '' AND description != '' ORDER BY RAND()
    )
    UNION
    (  
        SELECT id,name,year,description FROM albums WHERE (year = '' AND description != '') OR (year != '' AND description = '') ORDER BY RAND()
     )
    UNION
    (
         SELECT id,name,year,description FROM albums WHERE year = '' AND description = '' ORDER BY RAND()
     )
)

Na prvý pohľad sa zdá, že je všetko v poriadku, ale takýto SELECT akoby ignoroval zoradenie jednotlivých SELECTov náhodne. Ale v prípade, ak pridám LIMITY, napr. ORDER BY RAND() LIMIT 10, tak sa RAND() zoradenie prejavý. Vedel by mi prosím niekto pomôcť, prípadne ma spŕavne nasmerovať?
Vďaka.
Kajman
Profil
Zkuste místo unionů

ORDER BY (year = '') + (description = ''),  RAND()
Kamil Papica
Profil *
To je presne ono, na toto by som neprišiel.
Vďaka, doštudujem si možnosti zoraďovania, nevedel som, ze sa to dá aj takýmto spôsobom použiť. :-)

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