簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM