使用LIKE的PHP MySql搜索匹配太多行

时间:2012-05-25 09:07:22

标签: php mysql search sql-like

我接管了一个使用LIKE查询来搜索分隔值字段的网站。典型字段可能如下所示:

129|145|181

查询如下:

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

问题在于,当搜索时,例如, “29”,它返回其中带有“129”的字段。我希望它只返回带有“29”的字段。有没有办法做到这一点?

谢谢, ģ

6 个答案:

答案 0 :(得分:5)

使用它,更快更有效。

$str="129|145|181";
$newstr=str_replace("|",",",$str);
$sql='SELECT id,title FROM research WHERE members IN('.$newstr.')'

答案 1 :(得分:4)

SELECT id,title 
  FROM research 
 WHERE CONCAT('|',members,'|') like '|29|' 

SELECT id,title  
  FROM research  
 WHERE FIND_IN_SET(29,REPLACE('|',',',members)) 

答案 2 :(得分:2)

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

答案 3 :(得分:1)

而不是使用此方法“修补”我建议使用 JSON 来存储数字 和数组类似的东西,它们总是在值或键周围有“”

答案 4 :(得分:0)

你可以做。

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

对于您应该在运营商中的成员数组。

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

如果它是一个字符串,那么

memebers in ('121','123') 

你需要进行格式化。

答案 5 :(得分:0)

要检查此字段中的数字是否包含,以下是完整答案:

SELECT id,title FROM research WHERE members like '%|$arr[0]' OR members like '$arr[0]|%' or members like '%|$arr[0]|%'