2011-10-04 89 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."[[:>:]]' 
) 

性能方面也不好..但你会得到确切的结果..