2

LIKEクエリを使用して区切られた値のフィールドを検索するサイトを引き継ぎました。一般的なフィールドは次のようになります。

129|145|181

そして、クエリは次のようになります。

SELECT id,title FROM research WHERE members like '$arr[0]'

問題は、これが「29」などを検索すると、「129」を含むフィールドが返されることです。「29」が含まれるフィールドのみを返すようにします。これを行う方法はありますか?

ありがとう、G

4

6 に答える 6

5

これを使用すると、より速く効率的になります。

$str="129|145|181";
$newstr=str_replace("|",",",$str);
$sql='SELECT id,title FROM research WHERE members IN('.$newstr.')'
于 2012-05-25T09:15:06.707 に答える
4
SELECT id,title 
  FROM research 
 WHERE CONCAT('|',members,'|') like '|29|' 

また

SELECT id,title  
  FROM research  
 WHERE FIND_IN_SET(29,REPLACE('|',',',members)) 
于 2012-05-25T09:15:27.820 に答える
2
SELECT id,title FROM research WHERE members like '%|$arr[0]|%' OR members like '$arr[0]|%' OR members like '%|$arr[0]'
于 2012-05-25T09:11:48.287 に答える
1

このメソッドで「パッチを適用」する代わりに、 JSONを使用して、値またはキーの前後に常に「」が含まれる数値や配列のようなものを格納することをお勧めします。

于 2012-05-25T09:18:58.687 に答える
0

できるよ。

SELECT id,title FROM research WHERE members ='$arr[0]'

メンバーの配列については、演算子を使用する必要があります。

SELECT id,title FROM research WHERE members in (121,123)

その文字列の場合

memebers in ('121','123') 

フォーマットを行う必要があります。

于 2012-05-25T09:10:04.793 に答える
0

このフィールドに数字が含まれているかどうかを確認するには、完全な答えを次に示します。

SELECT id,title FROM research WHERE members like '%|$arr[0]' OR members like '$arr[0]|%' or members like '%|$arr[0]|%'
于 2012-05-25T09:12:04.353 に答える