ホームページ >データベース >mysql チュートリアル >MySQL の各カテゴリから 1 つのランダムな項目を効率的にクエリする方法は?
各 MYSQL カテゴリからのランダム項目のクエリ
データベース システムは、各カテゴリからランダム レコードを選択することが一般的なシナリオに遭遇します。さまざまなカテゴリに属し、それぞれに一意の ID を持つ項目が含まれる Items テーブルを持つデータベースを考えてみましょう。また、別のカテゴリ テーブルには、カテゴリの名前と ID が表示されます。
カテゴリごとに 1 つのランダムなアイテムを選択するには、グループ化とランダム化を組み合わせて利用できます。
まず、アイテムとアイテムを結合します。アイテムをそれぞれのカテゴリに関連付けるカテゴリ ID のカテゴリ テーブル:
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():
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
このクエリは、ランダムに並べ替えられたアイテムをカテゴリ ID 別に効果的にグループ化し、各グループの最初のアイテムを選択します。グループ化操作は並べ替えの前に行われるため、各カテゴリ内でランダムな順序が保持されます。
以上がMySQL の各カテゴリから 1 つのランダムな項目を効率的にクエリする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。