MySQL では、GROUP_CONCAT 関数を LEFT JOIN と組み合わせて使用して、複数のテーブルからデータを取得できます。ただし、正しく使用しないと、パフォーマンスの問題が発生する可能性があります。
チケット (チケット) とソリューション (ソリューション) のテーブルを含むヘルプ デスク データベースを考えてみましょう。次のステートメントを使用して、対応するソリューション エントリを持つすべてのチケットを取得するクエリが作成されます。
<code class="sql">SELECT Tickets.*, GROUP_CONCAT(Solutions.solution) AS CombinedSolutions FROM Tickets LEFT JOIN Solutions ON Tickets.id = Solutions.ticket_id ORDER BY Tickets.id;</code>
このクエリは、最初のチケットの情報と両方のチケットのすべてのソリューションを含む 1 行を返します。これは、チケットごとに関連するソリューションを含む個別の行が必要であるため、意図したものではありません。
この問題に対処するには、クエリを次のように変更できます。
<code class="sql">SELECT t.*, x.combinedsolutions FROM TICKETS t LEFT JOIN ( SELECT s.ticket_id, GROUP_CONCAT(s.solution) AS combinedsolutions FROM SOLUTIONS s GROUP BY s.ticket_id ) x ON x.ticket_id = t.ticket_id</code>
この改訂されたクエリでは、LEFT JOIN 句のサブクエリは、適切なグループ内の GROUP_CONCAT を使用して、各チケットの結合されたソリューションを取得します。次に、外側のクエリは、ticket_id フィールドを使用して、この結果をメインの Tickets テーブルと結合します。
別のアプローチは、ネストされたクエリ innerhalb der Haupt-SELECT-Anweisung:
<code class="sql">SELECT t.*, (SELECT GROUP_CONCAT(s.soution) FROM SOLUTIONS s WHERE s.ticket_id = t.ticket_id) AS combinedsolutions FROM TICKETS t</code>
以上がMySQL で GROUP_CONCAT と LEFT JOIN を使用して関連ソリューションを使用してチケットごとに個別の行を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。