Tento dotaz vrátí všechny položky spojené do kategorií v náhodném pořadí:
SELECT
c.id AS cid, c.category, i.id AS iid, i.name
FROM categories c
INNER JOIN items i ON c.id = i.category
ORDER BY RAND()
Chcete-li omezit každou kategorii na jednu, zabalte dotaz do části GROUP BY
:
SELECT * FROM (
SELECT
c.id AS cid, c.category, i.id AS iid, i.name
FROM categories c
INNER JOIN items i ON c.id = i.category
ORDER BY RAND()
) AS shuffled_items
GROUP BY cid
Všimněte si, že když dotaz obsahuje obě GROUP BY
a ORDER BY
klauzule, seskupení se provádí před řazením. Proto jsem použil dva dotazy:první třídí výsledky, druhý seskupuje výsledky.
Chápu, že tento dotaz nevyhraje žádný závod. Jsem otevřený návrhům.