我正在构建一个存储产品信息的应用程序,例如名称,类别,价格等。
产品可以属于多个类别,因此会有一个类别表来保存针对产品的信息,但我希望用户能够搜索他们喜欢的任何单词的产品。我的意思是用户可以输入产品名称,描述中的内容,类别,价格等。完全取决于用户。
我猜的查询(因为它尚未构建)将类似于:
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'并进行连接会更快吗?
由于
答案 0 :(得分:0)
作为一种选择 - 我并不是说这是最好的选择,但它可能对您有用 - 就是在您的产品上收集关键字列,将主要搜索字段存储为单个文本条目。
创建或更新产品时,重建此字符串并对该列执行单个匹配。
所以说你有这样的产品:
标题:酷工具
机身:带内置光剑的套筒扳手
标签:tools,lightsaber,cool(这些类似于关系,但仅举例来说,我将它们列为字符串)
它属于Tools
类别,以及类别Camping
。
在保存(添加或编辑)时,您将组成一个字符串,该字符串是所有文本本身的集合:
“酷工具内置的套筒扳手
光剑工具光剑酷工具露营“
即使它是多余的。
然后你搜索:
SELECT * FROM `products` WHERE MATCH(`search_terms`) AGAINST({search_term} IN BOOLEAN MODE)
所以你不必担心跨表where子句。 您可能需要熟悉match against,但那里有足够的资源。
我以前做过这件事,对我来说效果很好。从来没有任何性能问题。