MySQL の複数のテーブルから一意の結果を選択する
MySQL では、複数のテーブル間で JOIN 操作を実行すると、重複行が発生する可能性があります。結果セット内。これは、別のテーブルの 1 つのエントリに関連する複数の行を含むテーブルからデータを選択するときによく発生します。
問題ステートメント
次の例を考えてみましょう:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id;
このクエリは、ドリンク テーブルと Drinks_photos テーブルから各ドリンクの名前、価格、写真を取得しようとします。ただし、1 つの飲み物に複数の写真が関連付けられている可能性があるため、飲み物ごとに重複した行が生成されます。
解決策
重複を排除し、各飲み物のみが表示されるようにするには一度、グループ化メカニズムを組み込む必要があります。 MySQL では、これを実現するためのいくつかの方法が提供されています。
グループ化と集計の使用
1 つのオプションは、GROUP BY 句を使用して、一意のドリンクに基づいて結果をグループ化し、適用することです。必要な列の値を選択するための集計関数:
SELECT name, price, photo FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id;
このクエリでは、ドリンクス ID は列をグループ化して、異なる飲み物のみが結果に含まれるようにします。また、各ドリンクには複数の写真があるため、どの写真を表示するかを指定する必要があります。この例では写真が使用されていますが、MIN(写真) または MAX(写真) に置き換えて、それぞれ昇順または降順で最初または最後の写真を取得できます。
GROUP_CONCAT の使用
代わりに、MySQL には GROUP_CONCAT 関数が用意されており、これを使用して複数の値を 1 つの値に連結できます。単一の文字列:
SELECT name, price, GROUP_CONCAT(photo) FROM drinks, drinks_photos WHERE drinks.id = drinks_id GROUP BY drinks_id;
このクエリは、名前、価格、および各ドリンクに関連付けられたすべての写真のカンマ区切りのリストを取得します。
注:
連結される値が大きい場合、GROUP_CONCAT を使用するとパフォーマンスのオーバーヘッドが発生する可能性があることに注意することが重要です。さらに、値自体の中に区切り文字が存在する可能性があるので注意してください。
以上が重複した写真を含む複数の MySQL テーブルから一意のドリンク データを選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。