2011-08-13 19 views
0

我有以下架構產品表:返回行

products (itemname VARCHAR(50), itemid INT(10));

記錄樣本顯示如下(itemnameitemid):

  • 黑莓Curve 3G(黑色),1
  • 三星王牌,3
  • 黑莓曲線3G(白),2
  • 蘋果iPhone 4 32GB(黑色),4

現在假設用戶輸入查詢到網站的搜索框和相應的結果是顯示。也就是說,如果用戶輸入blackberry那麼黑莓手機應顯示

我要尋找以下問題的答案:

  1. 如何搜索文本與項目相匹配?例如:用戶可能在搜索框中輸入 輸入blackberry,那麼它可以如何搜索? 我應該尋找blackberry字爲上表中的itemname 列的子串?
  2. 如果用戶輸入兩個詞,如:apple 32gb。現在,如果我用 上述子串的提到的方法,然後它不會工作,因爲在其apple 32gb作爲子字符串表中沒有任何行。如何在這種情況下搜索?
  3. 如果用戶輸入像一個非常通用的搜索文本:mobiles。在這種情況下,應該顯示所有的手機。在這種情況下,將itemname作爲子字符串匹配也不起作用。
  4. 用戶可以輸入搜索文本:apple 32gb black color。在這種情況下,應顯示32GB容量和黑色的蘋果產品。

我知道實現搜索100%正確是不可能的。我只是尋找提示/如何繼續。我正在使用PHP,MySQL,Apache。

回答

1

什麼樣的數據庫是這樣的,如果MySQL可以在該字段中啓用全文搜索,然後只是一個簡單的查詢將會得到您期望的結果。

+0

嗨,吉姆,感謝您的回答。它有助於搜索像「三星手機」這樣的雙字搜索文本嗎?此外,我不認爲全文搜索將能夠爲通用查詢生成結果,例如:'mobiles','black color mobiles'等。 –

+0

我在最近添加了全文和搜索網站,它正在搜索文章名稱和它迄今爲止已經在測試中取得了很好的結果。有很多的例子,但檢查到這個職位的好基地,http://devzone.zend.com/article/1304。 – Jim

1

許多單詞搜索,我會做這樣的事情:

$searchArray = explode(" ", $searchString); 
foreach ($searchArray as $word) 
{ 
    //add an OR clause to your sql query like the following 
    $query .= "OR itemname like %".$word."%"; 
} 

的其他問題是更加複雜,但我希望這有助於