2013-04-25 68 views
0

執行搜索我建立存儲產品信息,即名稱,類別,價格等MySQL存儲到整數或文本

產品可以屬於多個類別的應用程序,所以會有一個類別表來保存這個針對產品的信息,但是我希望用戶能夠根據自己喜歡的任何詞搜索產品。我的意思是用戶可以輸入產品名稱,描述中的內容,類別,價格等。完全由用戶決定。

我猜測(因爲它是尚未建成)查詢會是這樣的:

SELECT * FROM tbl_product 
JOIN tbl_category ON tbl_product.product_id = tbl_category.product_id 
WHERE 
    tbl_product.name LIKE $query 
    OR tbl_product.description LIKE $query 
    OR tbl_category.category etc. 

我想保存這些數據的最佳方式是什麼,因爲我也有在列產品表是當前爲整數的產品類型(1 =頂部,2 =底部,3 =鞋等),但搜索頂部的用戶在搜索時不會輸入1,他們將進入頂部或頂部。我知道基於整數進行搜索會更快,但是在產品表中存儲「頂部」以搜索或存儲「1」並執行連接會更快嗎?

感謝

回答

0

作爲一種選擇 - 我不是說這是最好的選擇,但它可能爲你工作 - 是對存儲在主搜索字段作爲一個您的產品收集關鍵字列文本輸入。

當您創建或更新產品時,您將重建此字符串並針對該列執行單次匹配。

所以說,你有這樣的產品:

標題:很酷的工具
體:一個套筒扳手帶有內置光劍
標籤:工具,光劍,酷(這將是關係類的類別,但僅舉個例子,我將它們列爲字符串在這裏)

它在類別Tools,以及類別Camping

保存時(添加或編輯)您撰寫字符串,它是所有的文字本身的集合:

「酷工具套筒扳手帶有內置
光劍工具光劍酷工具野營」

即使它是多餘的。

然後你搜索,如:

SELECT * FROM `products` WHERE MATCH(`search_terms`) AGAINST({search_term} IN BOOLEAN MODE) 

所以你不必擔心跨表where子句。 您可能需要熟悉match against,但這裏有很多資源。

我以前做過這件事,它對我來說非常好。從來沒有任何性能問題。

+0

聽起來很不錯。謝謝 – puks1978 2013-04-25 01:08:38