0

我正在构建一个存储产品信息的应用程序,即名称、类别、价格等。

一个产品可以属于多个类别,因此会有一个类别表来保存针对产品的此信息,但是我希望允许用户能够根据他们喜欢的任何词搜索产品。我的意思是用户可以输入产品名称、描述中的内容、类别、价格等。完全取决于用户。

我猜测的查询(因为它尚未构建)将类似于:

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 = 鞋子等)但是用户搜索top 不会在搜索中输入 1,他们会输入 top 或 tops。我知道基于整数进行搜索会更快,但是将“top”存储在产品表中以搜索或存储“1”并进行连接会更快吗?

谢谢

4

1 回答 1

0

作为一种选择——我并不是说这是最好的选择,但它可能对你有用——是在你的产品上收集一个关键字列,将主要搜索字段存储为单个文本条目。

当您创建或更新产品时,您将重建此字符串并针对该列执行单个匹配。

所以说你有这样的产品:

标题:酷工具
主体:带有内置光剑的套筒扳手
标签:工具、光剑、酷(这些与类别类似,但仅作为示例,我在此处将它们列为字符串)

而且它在品类中Tools,也是在品类中Camping

在保存(添加或编辑)时,您编写一个字符串,该字符串是所有文本本身的集合:

“酷工具带有内置
光剑工具的套筒扳手光剑酷工具露营”

即使它是多余的。

然后你搜索:

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

所以你不必担心交叉表 where 子句。您可能需要熟悉match against,但有很多资源可供您使用。

我以前做过这个,对我来说效果很好。从来没有任何性能问题。

于 2013-04-25T01:01:23.807 回答