文字列値 '61,80,112,256' を含む MySQL テーブル列 rubrics があります。だから私はそのクエリを実行しようとします:
select * from table where 256 in (rubrics) and 61 in (rubrics)
そして、結果は返されません。助言がありますか?
rubrics
列はコンマ区切りのリストであるため、演算子IN
は機能しません。
MySQLには文字列リストで値を見つけることができる関数があるので、次を使用できるはずですFIND_IN_SET()
。
select *
from yourtable
where find_in_set(61, rubrics)
or find_in_set(256, rubrics)
SQL FiddlewithDemoを参照してください
のようなものWHERE rubrics LIKE '%,256,%' OR rubrics LIKE '256,%' OR rubrics LIKE '%,256'
。括弧を使用して61
でフィルタリングすることもできますが、結果のクエリは乱雑になります。キーを使用してサブクエリと結合を使用できるように、データを正規化することをお勧めします (本当のことです)。
FIND_IN_SET
(より良いアプローチであるため、ブルーフィートの答えも参照してください)
IN
演算子は文字列では機能しません
LIKE
またはのような正しい部分文字列一致演算子を使用しますLOCATE
1つのアドバイス-rubics列を,
文字で開始および終了するように更新します。これにより、622と262およびその他の組み合わせにも一致するのとはLOCATE(",62,", rubics)
対照的に、操作が明確になります。あなたのrubicsがで始まっていないので価値がある場合、検索は失敗LOCATE("62", rubics)
します,62,
62,blah,foo,bar
,
これを試して
select * from table where rubrics like '%'+'256,'+'%' and rubrics like '%'+'61,'+'%'