ホームページ > データベース > mysql チュートリアル > 列内のカンマ区切り値を使用してテーブルを結合するにはどうすればよいですか?

列内のカンマ区切り値を使用してテーブルを結合するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-08 12:00:21
オリジナル
389 人が閲覧しました

How to Join Tables with Comma-Separated Values in a Column?

カンマ区切り値によるテーブルの結合

データベースの正規化は効率的なデータ管理にとって重要ですが、プロジェクトによっては正規化されていない形式でレガシー データを処理する必要がある場合があります。この記事では、特定の列にカンマ区切りの値を指定して 2 つのテーブルを結合する手法について説明します。

シナリオ:
2 つのテーブルがあるとします:

  • メモ テーブル:

    • nid: メモID
    • forDepts: カンマ区切りの部門 ID
  • 役職テーブル:

    • id: 役職 ID
    • 名前: ポジションname

私たちの目標は、これらのテーブルを結合し、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート