[英]PHP MySql search with LIKE matches too many rows
我接管了一個使用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]|%'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.