質問
結果として返されるクエリを教えてもらえますか?
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
所属していません StackOverflow