2013-04-13 40 views
1

我想一個網站創建搜索功能。 在MySQL我想完全匹配的話,例如,如果我有這些頭銜幾個帖子:當根據where子句選擇行時,我如何匹配完整的單詞?

一天的時間

一個未來的一天

和我有以下搜索字符串:

SELECT title 
     FROM posts 
     WHERE title LIKE '%in%' 
     ORDER BY Date 
     DESC 

它將返回兩行,因爲LIKE%in%在第一行中都incoming第二行中顯示出來。

但我只希望它匹配整個單詞,所以只有第一行會被退回。

這可能嗎?

+1

[參見本(http://dev.mysql.com/doc/refman/4.1/en/fulltext-search.html) – Kermit

回答

1

你正在尋找一個MySQL的字邊界REGEXP:

SELECT title 
    FROM posts 
    WHERE title REGEXP '[[:<:]]in[[:>:]]' 

從MySQL的文檔:

這些標記表示word邊界。它們分別匹配單詞的開頭和結尾。單詞是單詞字符之前或之後沒有的單詞字符序列。

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

+0

謝謝,您能否簡要解釋一下那些手冊恐懼症的REGEXP聲明的功能? – crm

+1

我更新了我的答案。這兩個標記匹配單詞的開頭和結尾。 REGEXP代表正則表達式。 – jszobody

0

這樣做:

SELECT title 
    FROM posts 
    WHERE title LIKE '% in %' 
    ORDER BY Date 
    DESC 

如果它是你肯定之前,問題中的單詞後有空間的話。

+1

這不會爲標題工作,它開始的地方或以「in」結尾 – jszobody

+0

True!所以你可以這樣做'%in%'或LIKE'%in%'或LIKE'%in%'。我承認這不是最好的解決方案。這只是實現他想要的一種方式。可能有更好的方法。 – TheEwook