我接管了一个使用 LIKE 查询在分隔值字段中搜索的站点。一个典型的字段可能如下所示:
129|145|181
查询如下所示:
SELECT id,title FROM research WHERE members like '$arr[0]'
问题是当它搜索例如“29”时,它会返回包含“129”的字段。我希望它只返回带有“29”的字段。有没有办法做到这一点?
谢谢,G
使用这个,更快更高效。
$str="129|145|181";
$newstr=str_replace("|",",",$str);
$sql='SELECT id,title FROM research WHERE members IN('.$newstr.')'
SELECT id,title
FROM research
WHERE CONCAT('|',members,'|') like '|29|'
或者
SELECT id,title
FROM research
WHERE FIND_IN_SET(29,REPLACE('|',',',members))
SELECT id,title FROM research WHERE members like '%|$arr[0]|%' OR members like '$arr[0]|%' OR members like '%|$arr[0]'
我建议不要使用这种方法“修补”,而是使用JSON来存储数字和类似数组的东西,它们总是在值或键周围有“” 。
你可以做。
SELECT id,title FROM research WHERE members ='$arr[0]'
对于成员数组,您应该在运算符中。
SELECT id,title FROM research WHERE members in (121,123)
如果它是一个字符串,那么
memebers in ('121','123')
您需要进行格式化。
要检查此字段中是否包含数字,这是一个完整的答案:
SELECT id,title FROM research WHERE members like '%|$arr[0]' OR members like '$arr[0]|%' or members like '%|$arr[0]|%'