MySQL を使用した個別のカテゴリからのランダムなアイテムの選択
カテゴリ化列を持つ "Items" テーブルを含むデータベース シナリオでは、次のタスクが実行されます。各カテゴリから 1 つのアイテムをランダムに選択するのは困難です。これに対処するために、MySQL クエリを利用した次のアプローチを検討してみましょう。
方法 1: 内部結合と部分グループ化
このクエリは、ランダムに並べ替えられたカテゴリに結合されたすべてのアイテムを取得します。
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 つのクエリのアプローチにより、各カテゴリにランダムな項目が 1 つだけ含まれることが保証されます。
このクエリは解決策を提供しますが、潜在的な効率限界を認識することが重要です。パフォーマンスの最適化に関するあらゆる提案を歓迎します。
以上がMySQL の各カテゴリから 1 つのアイテムをランダムに選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。