ホームページ > データベース > mysql チュートリアル > MySQL クエリ内のカンマ区切り文字列内の特定の値を効率的に検索するにはどうすればよいですか?

MySQL クエリ内のカンマ区切り文字列内の特定の値を効率的に検索するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-22 21:27:11
オリジナル
860 人が閲覧しました

How to Efficiently Find Specific Values in Comma-Separated Strings within MySQL Queries?

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 サイトの他の関連記事を参照してください。

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