0

私はこれで何時間も立ち往生しており、誰かが助けてくれれば幸いです。

私はデータに対してmysql検索を行っています:

行 ID リスト データ
1 3,2,7,11
2 1,27
3 2,17,44
4 19,77

私の問題は、厳密な検索をしたいということです。

上記のデータに「7」がある行を検索したいとしましょう。

私が行った場合 :

list_data が '%7%' のようなテーブルから ID を選択

明らかに4行すべてを返します

結果として1行目だけを取得したい。

どうすればそれを達成できますか?

前もって感謝します :)

4

3 に答える 3

4

FIND_IN_SET()を使用する

select id from table 
where find_in_set(7, list_data) > 0

ところで、将来このような問題を回避するために、データを正規化する必要があります。複数の値ではなく、常に 1 つの値のみを列に格納してください。

于 2013-09-04T11:32:43.973 に答える
2

FIND_IN_SET代わりに関数(別の回答にサンプルがあります)または正規表現を使用できます:

SELECT id FROM `table` WHERE list_data REGEXP '(^|,)7($|,)'

ただし、複数のデータ リンクを 1 つのフィールドに配置しようとしているようです。もしそうなら、それを避けてください - それはリレーションDBの原則に違反しているためです。代わりにリンク テーブルを使用すると、SQL JOIN演算子を使用してクエリが書き換えられます。

于 2013-09-04T11:37:31.473 に答える
1

テーブルの形式が間違っています。それはする必要があります

id Data
1  3
1  2
1  7
1  11
2  1
2  27
3  2
3  17
3  44
4  19
4  77 

とクエリ

select id from table where data = 7 
于 2013-09-04T11:39:43.997 に答える