2011-10-04 128 views
1

我正在嘗試使用「Sonal」進行搜索時發生問題,但從記錄中獲得的結果具有「Sonal」&「personal」。當我在var名稱之前刪除%時,得到的結果是從「Sonal」開始的記錄,並且沒有發現該文本在任何地方都有「Sonal」。Mysql文本搜索問題

下面是該查詢:

AND (
     lower(document_text) LIKE '%".$search_name2."%' 
    OR lower(customdoc_name) LIKE '%".$search_name2."%' 
    OR lower(doc_tags) LIKE '%".$search_name2."%' 
) 

建議。 1 - 個人證書
建議2 - 個人證書。

我只希望以「Sonal」進行搜索時返回第2條記錄。

我沒有使用FULLTEXT字段。

+1

你爲什麼不使用全文搜索? –

回答

2

這可能會幫助,

增加空間只退字符串或正面和背面或正面的。通過這個,你將在字符串或字符串的中間或字符串的結尾開始的情況下得到帶有「單調」的結果。

AND (
     lower(document_text) LIKE '%".$search_name2." %' 
    OR lower(customdoc_name) LIKE '% ".$search_name2." %' 
    OR lower(doc_tags) LIKE ' %".$search_name2."%' 
) 
+0

:)不錯,我沒有注意到這個空間:) –

0

「%」運算符僅以這種方式運行。

這是一個通配符,表示任何STRING。 所以

  1. 「%HELL%」 將匹配 「OT * HELL * O」, 「地獄」, 「HELLO」, 「THE_ HELL」 等
  2. 「地獄%」 將只匹配以HELL,HELLO,HELLOWW,但不是OTHELLO開頭的詞。
  3. 「%HELL」將匹配以HELL結尾的單詞,如「THE_HELL」,但不匹配「HELLO」。
+0

它應該是一個評論而不是答案 – diEcho

+0

@diEcho爲什麼它更符合評論而不是回答? – DhruvPathak

+2

@DhruvPathak:它更多的是一個側面說明。實際上並沒有回答這個問題。雖然它有幫助。沒有任何進攻。 :) – HashimR

1

使用REGEXP嘗試以下..

AND (
     lower(document_text) REGEXP '[[:<:]]".$search_name2."[[:>:]]' 
    OR lower(customdoc_name) REGEXP '[[:<:]]".$search_name2."[[:>:]]' 
    OR lower(doc_tags) REGEXP '[[:<:]]".$search_name2."[[:>:]]' 
) 

性能方面也不好..但你會得到確切的結果..