質問

結果として返されるクエリを教えてもらえますか?

ID Name Hidden 
1 Mika 1,4,2 
2 Loca 0 
3 Nosta 4 
4 Like 2 

このようなものselect * hedhind(4)からのテーブルから

役に立ちましたか?

解決

SELECT * FROM table WHERE FIND_IN_SET('4',Hidden);

のドキュメント find_in_set

他のヒント

SELECT * FROM table WHERE CONCAT(',',Hidden,',') LIKE '%,4,%'

または、このように使用することを避けることができます

SELECT * FROM table WHERE INSTR(CONCAT(',',Hidden,','), ',4,') > 0

これは40、14などのようなものを取得しませんが、隠されたフィールドにスペースがないことを確認する必要があります(例: 1, 4, 5 または、concatを更新し、それに応じて機能します。

SELECT * FROM table WHERE Hidden LIKE '%4%'

%はワイルドカードです。

全文検索 正しい単語ブレークを使用する限り、これに対する合理的な解決策かもしれません。

提案されているように、全文検索を使用するか、

隠された値を、現在の行のIDを使用して別のテーブルに回します。

たとえば、ミカはこのテーブルに3つのエントリを持っています

id = 1、非表示= 1
id = 1、非表示= 4
id = 1、非表示= 2

その後、このスピンオフテーブルに対して結果を返すことができます。

また、テーブルを正規化し、これらの「隠された」値を別のテーブルに保存することを検討することもできます。あなたが持っている行の数に応じて、それははるかに高速になります:

ID Hidden
1  1
1  4
1  2 
3  4 
4  2 

と:

SELECT DISTINCT table.* FROM table, hidden_table WHERE table.ID = hidden_table.ID AND hidden_table.hidden = 4
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top