【问题标题】:Mysql storage to perform search on integer or textMysql存储对整数或文本执行搜索
【发布时间】:2013-04-25 00:48:13
【问题描述】:

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

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

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

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”并进行连接会更快吗?

谢谢

【问题讨论】:

    标签: php mysql


    【解决方案1】:

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

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

    假设你有这样的产品:

    标题:酷工具
    主体:带有内置光剑的套筒扳手
    标签:工具、光剑、酷(这些与类别类似,但只是举例来说,我在这里将它们列为字符串)

    它属于Tools 类别以及Camping 类别。

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

    "Cool tool 一个内置的套筒扳手
    光剑工具光剑酷工具露营"

    即使是多余的。

    然后你搜索:

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

    因此您不必担心交叉表 where 子句。 您可能需要熟悉match against,但那里有大量资源。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 2015-04-10
      • 1970-01-01
      • 2020-09-29
      相关资源
      最近更新 更多