Kueri ini mengembalikan semua item yang digabungkan ke kategori dalam urutan acak:
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()
Untuk membatasi setiap kategori menjadi satu, bungkus kueri dalam sebagian 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
Perhatikan bahwa ketika kueri memiliki GROUP BY
dan ORDER BY
klausa, pengelompokan dilakukan sebelum penyortiran. Inilah mengapa saya menggunakan dua kueri:yang pertama mengurutkan hasil, yang kedua mengelompokkan hasil.
Saya mengerti bahwa kueri ini tidak akan memenangkan perlombaan apa pun. Saya terbuka untuk saran.