如果我搜索LENA,我只想要得到的結果,其中LENA就是一個字,而不是像Lenason或安娜 - 萊娜或馬萊娜PHP MySQL的搜索查詢通配符問題
單詞的一部分我怎樣寫這樣的查詢,而不是
"select * from users where name like '%LENA%'"
應該改爲什麼?
如果我搜索LENA,我只想要得到的結果,其中LENA就是一個字,而不是像Lenason或安娜 - 萊娜或馬萊娜PHP MySQL的搜索查詢通配符問題
單詞的一部分我怎樣寫這樣的查詢,而不是
"select * from users where name like '%LENA%'"
應該改爲什麼?
你可以使用REGEXP
:
SELECT fields
FROM users
WHERE name REGEXP '(^|\s+)LENA($|\s+)'
你可能會更好尋找到Full Text Search這一點。
否則,我認爲你堅持做這樣的事情
"select * from users WHERE CONCAT(' ',name, ' ') like '% LENA %'"
,因爲它需要進行全表掃描,這將是非常低效。
**全文搜索**會做的伎倆,但是你的「類似」查詢將會得到與原始相同的結果(但是具有更多的cpu開銷)。 – 2010-09-12 11:34:54
@Bob - 你說得對,我的查詢存在問題,但沒有你想到的我想的問題。我忘了你需要在MySQL中使用'CONCAT'來進行字符串連接,而不是'+'。連接空格的原因是,如果沒有這個,那麼'lena'是第一個,最後一個或唯一一個單詞的名稱將不匹配where子句的名稱,如'%LENA%'。 – 2010-09-12 12:14:44
在MySQL手冊中查找'%',它也匹配零字符。這是我邏輯上的缺陷。 – 2010-09-12 13:14:23
使用這一個:
select * from users where name like '% LENA %' OR name like 'LENA %' OR name like '% LENA' OR name like 'LENA'
試試,它會工作,並在開始和結束2個空格太簡單了。 其漫長而快速的查詢。你也可以使用全文搜索,Concat,Regex ...但對我來說,我喜歡簡單,只需在%之前添加一些空格即可。
但是,你可以嘗試短,但慢查詢:
SELECT * FROM users WHERE name REGEXP '(^|\s+)LENA($|\s+)'
我看你未接受我的答案;什麼地方出了錯? – NullUserException 2010-09-12 04:40:02