2012-08-08 67 views
4

實例搜索關鍵字「洗車」
洗車長字符串搜索必須出現在字符串中,無論位置MySQL查詢多個關鍵字使用PHP

的搜索字符串可以很長,查詢應搜索爲這些關鍵字一起和分開。可以有兩個以上的關鍵字。

$query="SELECT * FROM TABLE WHERE zip LIKE'abc'"; 
$key= explode(" ", $keywords); 
for($i = 0; $i < count($key); $i++){ 
    $query.=" AND (dealTitle LIKE '".$key[$i]." %' OR dealTitle LIKE '% ".$key[$i]." %' OR dealTitle LIKE '% ".$key[$i]." ')"; 
    } 

然而,該查詢返回一個包含「汽車」 「洗」的記錄。

如果我使用「洗車」這兩個詞至少需要出現一次。有關如何修改我的搜索以考慮此條件的任何建議?

回答

1
for($i = 0; $i < count($key); $i++){ 
     $query.=" AND (dealTitle rlike '[[:<:]]".$key[$i]."[[:>:]]')"; 
}  

應該使用AND

編輯:

for($i = 0; $i < count($key); $i++){ 
      $query.=" AND (dealTitle like '% ".$key[$i]." %' or dealTitle like '% ".$key[$i]."' or dealTitle like '".$key[$i]."%') "; 
    }  
+0

同樣的問題,它會接受關鍵字「卡」也隨着汽車 – Natasha 2012-08-08 08:15:06

+0

它會返回關鍵字「CAR」,如果洗不是在字符串? – Natasha 2012-08-08 08:32:51

+0

你想要的是洗車必須出現在字符串中,無論位置,我的理解是否正確? – sel 2012-08-08 08:35:09

0

試試這個:

AND (CONCAT(' ',dealTitle,' ') LIKE '% car %' and 
    CONCAT(' ',dealTitle,' ') LIKE '% wash %') 
+0

它將返回我的卡也..這是不被接受的關鍵字一個更多的問題在這裏相同[鏈接] http://stackoverflow.com/questions/10414586/regexp-in-mysql-find-a-string -that-holds-all-keywords-and-operator – Natasha 2012-08-08 08:14:04

+0

@Natasha:我已經更新了我的答案,現在請plz chek – 2012-08-08 08:19:03

+0

那麼第二個關鍵字在開頭呢?像「洗車」 – Natasha 2012-08-08 08:29:38

4

如果你正在使用MySQL數據庫中,有這將是一個完整的文本搜索功能強大且可擴展的解決方案。

$query .= " AND MATCH(dealTitle) AGAINST('". $searchString ."')"; 

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html#function_match

看看這個文章,瞭解MySQL的全文檢索功能。

+0

這裏是錯誤#1214 - 使用的表類型不支持FULLTEXT索引 – Natasha 2012-08-08 08:19:55

+0

所以有可能在這一列中引入FULLTEXT索引? – sundar 2012-08-08 08:22:20

+0

沒有其他解決方案 – Natasha 2012-08-08 08:27:27

0

嘗試此查詢: -

AND (dealTitle LIKE '%car wash%') 
0

你基本上是試圖實現一個搜索引擎做什麼 - 全文索引。 LIKE '%keyword%'是你已經知道的部分匹配。不僅它打到了一個字,它非常慢,因爲db必須讀取和比較磁盤上的每個記錄。

考慮使用全文索引器。 MySQL特別支持它。請參閱FULLTEXT