2013-03-12 56 views
0

我正在爲社區周圍的一些農民建立一個數據驅動的網站(使用PHP和MySQL)(當然了 - 你會在第二時間看到的)。他們希望能夠列出他們的產品,並讓人們搜索這些產品,他們的名字隨着鏈接到一個詳細介紹他們所有產品的頁面。儘管我知道這將是一個長長的列表,但我認爲,「由於每次搜索mysql數據庫都是挑剔的 - 包括區分大小寫 - 我只是按字母順序列出一個列表,人們可以從下拉框中選擇他們想要搜索什麼,沒問題。「搜索顯示結果與輸入的項目類似

那麼,現在這是一個問題。他已經擴大了該網站的參數。他現在想要包括手工製作和自制產品。毋庸置疑,我們從數十種潛在產品到數百種潛在產品,現在下拉式清單已不再可行。但是,如果我爲訪問者使用文本字段來搜索網站,除非他們輸入時沒有拼寫錯誤並使用相同的大小寫,否則他們將無法從搜索中獲得準確的結果。

任何人都可以推薦另一種方法嗎?我知道「LIKE」搜索,但它並不能真正解決我的問題 - 尤其是因爲它可能會在搜索中產生誤報。任何幫助將不勝感激,謝謝!

+0

「提前輸入」類型的搜索如何?你也可以將同義詞存儲起來,這樣可以一起找到「手工製作」和「自制」。 – ethrbunny 2013-03-12 14:46:01

+0

原諒我的無知,我是自學成才,有點新,但我只是想到了一些事情。 MySQL中是否存在區分大小寫的排序與LIKE搜索相結合會大大拓寬結果? – 2013-03-12 16:04:58

回答

0

嗯,這個問題有點含糊,因爲你在談論多個搜索參數。

這更多的是設計選擇。例如,考慮以下因素:

  • 對於諸如「自制」或「手工製作」,也許下面的輸入框,你應該有一個複選框,人們可以添加額外的標誌來搜索
  • 說,按名稱搜索「約翰·史密斯」,並勾選「手工製作」和「自制」
  • 的「手工製作」,並在數據庫中的「自制」字段將始終是相同的(無論是開/關)

所以,一個SQL查詢可能是這樣的:

SELECT * FROM products WHERE farmername LIKE '%$search%' AND handmade = 'handmade' 

或者,當輸入數據時,如果手工檢查,插入一個整數到手工製作,其中1將意味着手工進行檢查,0手工未被選中

所以您的查詢就會然後去和手工= 1(或0),沒有手工

這些都只是一些想法,你會得到,但是這是一個多數據庫的決定,你如何創建表使用標誌設計決策

0

我會使用兩個表格:

  • 一個與所有可能的搜索詞
  • 一個與原來適用的任何條款的同義詞(例如,「手工」和「自制」)

使用AJAX來從第一臺爲字符搜索值在文本框中輸入。返回使用的措辭列表:從SEARCH_TABLE

選擇項,其中長期LIKE「%<輸入字符串>%」

纔開始,當你有少於10次命中左右返回值。 (IE輸入2個字母時不填充)。然後當輸入一個特定的術語時,在第二個表中搜索同義詞並將其包含在搜索中。在結果頁面中,表明您包含了同義詞,並且可能會分別放置一個「X」以選擇重新搜索那些被排除的內容。

請注意,「like」不區分大小寫。