リレーショナル データベースでは、通常、列は各行の単一の値を保持します。ただし、特定のシナリオでは、複数の値をカンマなどの区切り文字で区切って 1 つの列内に保存する必要がある場合があります。これにより、等価演算子のような従来の演算子が期待どおりに機能しなくなるため、データのクエリ時に問題が発生する可能性があります。
たとえば、親子関係を格納する次のテーブルを考えてみましょう:
id name children 1 Roberto Michael,Dia 2 Maria John,Alex 3 Mary Alexandre,Diana
次のクエリを使用して「Alex」という名前の子を持つ親を検索しようとすると、
WHERE children = 'Alex'
でも結果はゼロになります。アレックスはマリアの子供ですが。これは、子列に複数の値があるために完全に一致するものを探しているためです。
このような状況に対処するには、別のアプローチを検討する必要があります。
スキーマの正規化:
理想的な解決策は、スキーマを正規化し、子用に別の行を持つ別のテーブルを作成することです。各子と親への参照。これにより、子の名前に基づいた効率的なクエリが可能になります。
FIND_IN_SET の使用:
スキーマの正規化が不可能な場合は、FIND_IN_SET 関数を使用できます。値はカンマ区切りリスト内に存在します。クエリは次のようになります。
WHERE FIND_IN_SET('Alex', children)
これは、Alex という名前の子供を持つ親を返します。ただし、FIND_IN_SET は最も効率的なアプローチではなく、正規化が実行できない場合にのみ使用する必要があることに注意することが重要です。
以上が単一のデータベース列に格納されている複数の値をクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。