我接管了一个使用LIKE查询来搜索分隔值字段的网站。典型字段可能如下所示:
129|145|181
查询如下:
SELECT id,title FROM research WHERE members like '$arr[0]'
问题在于,当搜索时,例如, “29”,它返回其中带有“129”的字段。我希望它只返回带有“29”的字段。有没有办法做到这一点?
谢谢, ģ
答案 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]|%'