私はこのクエリを逆にするのが好きです:
SELECT * FROM table WHERE status IN ( option,option1,option2 );
のようなクエリで
SELECT * FROM table WHERE status contains ( 'option' );
フィールド「ステータス」列に含まれる場所 (例):「オプション、オプション 1」。
私が使うとき
SELECT * FROM table WHERE status LIKE '%option%' );
また、「option1」のみを含む「status」列を持つ行も選択します
これは可能ですか?
サンプルデータ:
id,name,status
1,'test1','option,option1'
2,'test2','option,option2'
3,'test3','option2'
4,'test4','option2,option3'
5,'test5','option'
SELECT * FROM table WHERE status contains ( 'option' );
このクエリは、選択レコード 1、2、および 5 を選択する必要があります。
「ステータス」フィールド タイプは varchar です。
問題は、オプションに追加された番号を除いて、ステータス フィールドにほとんど同じようなデータが含まれていることです。もちろん、これは作り話ですが、実際にはこの種のパラメーターがあります。
更新: ガンボの提案の後、ついに見つけました。
私は最初にガンボのリードを試しました(> 0を追加しました):
SELECT * FROM table
WHERE FIND_IN_SET('option', status) > 0;
しかし、それもうまくいきませんでした。
いくつかいじった後、原因はステータスフィールドのオプション間のスペースであることがわかりました。これらのレコードは別のソースからインポートされ、コンマの後にスペースが含まれています。
「option,option1」の代わりに「option,option1」
だから私は次のようになりました:
SELECT * FROM table
WHERE FIND_IN_SET('option', TRIM(REPLACE(status,' ',''))) > 0;
これは私にとってはうまくいきました。