Den här frågan returnerar alla objekt som är kopplade till kategorier i slumpmässig ordning:
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()
För att begränsa varje kategori till en, slå in frågan i en delvis 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
Observera att när en fråga har både GROUP BY
och ORDER BY
klausul utförs grupperingen före sortering. Det är därför jag har använt två frågor:den första sorterar resultaten, den andra grupperar resultaten.
Jag förstår att den här frågan inte kommer att vinna något race. Jag är öppen för förslag.