データベースの正規化は効率的なデータ管理にとって重要ですが、プロジェクトによっては正規化されていない形式でレガシー データを処理する必要がある場合があります。この記事では、特定の列にカンマ区切りの値を指定して 2 つのテーブルを結合する手法について説明します。
シナリオ:
2 つのテーブルがあるとします:
メモ テーブル:
役職テーブル:
私たちの目標は、これらのテーブルを結合し、forDepts 列を Positions テーブルの値に関連付け、カンマで区切られたポジション名を持つ新しい列を作成することです。
を使用した解決策CONCAT_WS:
SELECT n.nid, CONCAT_WS(', ', p.name) AS DepartmentName FROM Notes n JOIN Positions p ON n.forDepts = p.id
ただし、この方法では、一致するすべての部門ではなく、各部門 ID の最初の一致のみが取得されます。
FIND_IN_SET を使用した解決策:
SELECT a.nid, GROUP_CONCAT(b.name ORDER BY b.id) AS DepartmentName FROM Notes a INNER JOIN Positions b ON FIND_IN_SET(b.id, a.forDepts) > 0 GROUP BY a.nid
FIND_IN_SET 関数は、値が次のとおりであるかどうかを確認します。カンマ区切りの文字列で指定します。 JOIN 条件で使用することで、一致するすべての位置が確実に含まれるようになります。 GROUP_CONCAT 関数は、取得した位置名をカンマで区切って連結します。
PHP コードの統合:
指定された PHP コードを変更して、拡張されたDepartmentName 列を取得することができます。上記の提案された解決策を使用した mysql_query ステートメント内のクエリ。これにより、コードでカンマ区切りの位置名を正しくエクスポートできるようになります。
注:
データベースを正規化するのが理想的ですが、正規化されていないデータの処理が必要になる場合があります。この記事で説明する手法は、このようなシナリオで効率的にテーブルを結合し、カンマ区切り値を集計するためのソリューションを提供します。
以上が列内のカンマ区切り値を使用してテーブルを結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。