2011-09-26 193 views
0

我一直在搜索一下StackOverflow和Interweb,我沒有太多的運氣。使用MySQL LIKE匹配整個字符串

我有一個類似如下的URL ...

nr/online-marketing/week-in-review-mobile-google-and-facebook-grab-headlines 

我正在從URL中的商品名稱和替換「 - 」與「」給我:

week in review mobile google and facebook grab headlines 

在這一點上,這是我對文章的所有信息,所以我需要使用它來查詢數據庫以獲取文章信息的其餘部分,問題出現了,但這個字符串與文章的實際標題不匹配,這個實例的實際標題是:

Week in review: Mobile, Google+ and Facebook grab headlines 

正如你可以看到它包含額外的標點符號,所以我需要找到一種使用MYSQL LIKE來匹配文章的方法。

希望有人可以幫忙,標準SELECT * FROM table WHERE field LIKE $name不起作用,我希望能夠找到一種方法來做到這一點,而不會分裂每個單詞,但如果那是什麼它歸結爲那麼這麼做吧!

謝謝。

+0

也許使用正則表達式的方法將有助於在這裏。 – DOK

+0

使用正則表達式與什麼? – lukehillonline

+0

也許你可以使用'%%評論%Mobile%Google%和%Facebook%grab%標題'? %符號是通配符並被解釋爲「零個或多個字符」。 –

回答

0

試試MySQL MyISAM引擎的全文搜索。在您的情況下,查詢將是:

SELECT * FROM table 
WHERE MATCH (title) AGAINST ('week in review mobile google and facebook grab headlines'); 

這需要您將錶轉換爲MyISAM。還取決於表的大小,測試查詢的性能。

見下面的詳細信息: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

0

這看起來更像是一個數據庫設計問題......如果您使用具有不同字段的大文本作爲主鍵的形式,它可能會導致重複或同步問題。

一個可能的解決方案是給每個條目一個唯一的標識符(如果MSQL支持,可能是一個int或uniqueidentifier字段),並使用該字段將實際的healdine映射到URL。

另一個可能的解決方案是創建一個表,將每個標題與其URL相關聯並使用該表進行查找。這會產生一些額外的開銷,但會確保標題中的特殊字符永遠不會影響查找過程。

至於如何用你當前的設計做到這一點,你可以通過單獨標記每個單詞然後搜索包含所有令牌的條目來進行某種正則表達式搜索,但我相當肯定MSQL不提供基本命令中的此功能。

+0

這個問題實際上與我的htaccess ReWrite條件有關,我的URL必須按照上面顯示的方式進行構建,這意味着我不能包含文章的數據庫ID,否則我會很久以前,Micheal Mior幫助我意識到容易soloution,我已經實現了這一點,它現在正常工作,無論如何。 – lukehillonline