1

結果として行 ID 1 と 3 を返すクエリを教えてもらえますか?

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

この SELECT * FROM table WHERE Hidden HAVING(4) のようなもの

4

6 に答える 6

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

FIND_IN_SETのドキュメント

于 2010-04-16T14:08:08.727 に答える
1

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

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

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

これは 40、14 などを取得しませんが、Hidden フィールドにスペースがないことを確認する必要があります (たとえば、1, 4, 5concat と LIKE 関数を適宜更新します。

于 2010-04-16T14:11:32.120 に答える
0

また、テーブルを正規化し、適切な列にインデックスを持つ別のテーブルにこれらの「隠された」値を格納することを検討することもできます。あなたが持っている行の数に応じて、それははるかに高速になります:

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
于 2010-04-16T14:33:06.510 に答える
0
SELECT * FROM table WHERE Hidden LIKE '%4%'

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

于 2010-04-16T14:02:18.490 に答える
0

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

非表示の値を、現在の行の ID を持つ別のテーブルにスピンオフします。

たとえば、Mika はこのテーブルに 3 つのエントリを持ちます。

ID = 1、隠し =1
ID = 1、隠し =4
ID = 1、隠し =2

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

于 2010-04-16T14:10:09.203 に答える
0

正しい単語区切りを使用している限り、全文検索が妥当な解決策になる可能性があります。

于 2010-04-16T14:06:20.700 に答える