Deze zoekopdracht retourneert alle items die in willekeurige volgorde aan categorieën zijn toegevoegd:
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()
Om elke categorie tot één categorie te beperken, wikkelt u de zoekopdracht in een gedeeltelijk 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
Merk op dat wanneer een zoekopdracht zowel GROUP BY
en ORDER BY
clausule, wordt de groepering uitgevoerd vóór het sorteren. Daarom heb ik twee zoekopdrachten gebruikt:de eerste sorteert de resultaten, de tweede groepeert de resultaten.
Ik begrijp dat deze vraag geen enkele race gaat winnen. Ik sta open voor suggesties.