このクエリは、カテゴリに結合されたすべてのアイテムをランダムな順序で返します:
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()
各カテゴリを1つに制限するには、クエリを部分的でラップします。 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
クエリに両方のGROUP BY
がある場合は注意してください およびORDER BY
句では、グループ化は並べ替えの前に実行されます。これが、2つのクエリを使用した理由です。最初のクエリは結果を並べ替え、2番目のクエリは結果をグループ化します。
このクエリがレースに勝つことはないことを理解しています。提案を受け付けています。