MySQL クエリとカンマ区切りの文字列値: 集中的なアプローチ
MySQL データベース内でカンマ区切りの文字列として保存されたデータを管理すると、特定の値を取得するときに問題が発生することがよくあります。 COLORS
テーブル内の SHIRTS
フィールドに「1,2,5,12,15」のようなカンマ区切りの数字が含まれており、各数字が色を表すと想像してください。
単純な LIKE クエリの問題
SELECT * FROM SHIRTS WHERE COLORS LIKE '%1%'
のようなクエリは、色 1 (赤) のシャツを検索することを目的としていますが、文字列の部分一致により、誤って 12 (グレー) や 15 (オレンジ) のような色のシャツも返します。
正確な値の取得手法
色 1 のシャツだけを分離するには、より正確な方法が必要です。
方法 1: 完全一致に CONCAT を活用する
CONCAT
関数を使用してカンマを戦略的に追加することで、完全一致を保証できます。
<code class="language-sql">SELECT * FROM SHIRTS WHERE CONCAT(',', COLORS, ',') LIKE '%,1,%'</code>
これにより、COLORS
文字列の先頭と末尾にカンマが追加され、「,1,」を正確に検索できるようになります。
方法 2: find_in_set 関数を使用する
あるいは、find_in_set
関数はより直接的な解決策を提供します。
<code class="language-sql">SELECT * FROM SHIRTS WHERE FIND_IN_SET('1', COLORS) > 0</code>
FIND_IN_SET
は、検索文字列 (この場合は「1」) がカンマ区切り文字列 (COLORS
) 内で見つかった場合、0 より大きい値を返します。
これらのメソッドは、不正確な LIKE
ステートメントの落とし穴を回避して、MySQL クエリ内のカンマ区切りの文字列から特定の値を正確に抽出する効率的な方法を提供します。 これらのソリューションが機能する一方で、一般に、データの整合性とクエリのパフォーマンスを向上させるための長期的な最善のソリューションは、データベースを正規化してカンマ区切り値を避けることであることに注意してください。
以上がMySQL クエリ内のカンマ区切り文字列内の特定の値を効率的に検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。