列に複数の値を持つレコードの検索
リレーショナル データベースでは、単一の列に複数の値を格納するのが一般的です。ただし、このような列を使用してデータをクエリする場合、特定の値を分離するのが困難な場合があります。カンマで区切られた複数の名前を含む「子」列を持つテーブルがあるシナリオを検討してみましょう。
問題:
次のテーブルを考えてみましょう:
id | name | children |
---|---|---|
1 | Roberto | Michael,Dia |
2 | Maria | John,Alex |
3 | Mary | Alexandre,Diana |
目的は、アレックスという名前の子供を持つ親を見つけることです。 「WHERE Children = 'Alex'」を使用するのが理想的ですが、各セルに複数の名前があるため失敗します。 「WHERE Children LIKE '%Alex%'」を使用すると、無関係な一致がさらに返されます。
正規化スキーマ:
この問題に対処するには、次のようにテーブル スキーマを正規化できます。子ごとに 1 行を持つ子用の別個のテーブル。元のテーブルを子テーブルと結合して、特定の子を持つ親を見つけることができます。ただし、この解決策が実行不可能な場合は、代替手段があります:
FIND_IN_SET 関数:
MySQL FIND_IN_SET() 関数を使用して、特定の値があるかどうかを確認できます。はカンマ区切りのリスト内に存在します。このシナリオの場合、クエリは次のようになります。
WHERE FIND_IN_SET('Alex', children)
このクエリは、「children」列で「Alex」が見つかった行を返します。
以上が単一のデータベース列に複数の値を持つレコードを効率的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。