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 回答