【问题标题】:What is the right way to make a database searchable?使数据库可搜索的正确方法是什么?
【发布时间】:2019-05-28 05:11:38
【问题描述】:

我正在尝试使我的数据库可搜索。我的一些表是产品、类别、子类别制造年份、型号、品牌。我在查询中使用“%LIKE%”,然后在表上使用联合。我得到了一个结果,但是我无法获得表名的问题之一。我想到的一种解决方案是创建一个包含 4 列的可搜索表:

id、可搜索词条(可以是 sku、类别、子类别等)和可搜索词条的 ID。

【问题讨论】:

  • UNION ALL SELECT 'mytable' AS tablename, term FROM ... 您可以在联合的每个子选择中放入一个带有虚拟字段的简单字符串值。

标签: php mysql laravel


【解决方案1】:

你可以这样做:

...UNION ALL SELECT 'mytable' AS tablename, term FROM mytable ... 基本上,您可以在联合的每个子选择中放入一个带有虚拟字段的简单字符串值。在这种情况下,我只是将其命名为 tablename,其值为 "mytable",此示例表的名称。

因此mytable 中的每一行都会添加一个名为tablename 的字段,其字符串值为mytable。然后,当您合并结果时,每个结果集(Sub-Select)在各自表的查询中可能有不同的字符串值(tablename)。

您也可以参考这篇专门关于“虚拟列”的帖子

How to create virtual column using MySQL SELECT?

我不知道我是否会说这是“正确”的方式,但它确实有效。

享受

【讨论】:

    【解决方案2】:

    既然您已经在使用 UNION,为什么不在每个 UNIONed 子查询中添加正在查询的表的名称作为列,例如:

    SELECT 'table1' AS table_name, id, field1, field2
    FROM table1
    WHERE value LIKE ?
    UNION
    SELECT 'table2' AS table_name, id, field11, field12
    FROM table2
    WHERE value LIKE ?
    UNION
    ...
    

    在获取数据时,可以通过查看table_name列获取每条记录返回的表名。

    注意:返回每行的主键也是一个好主意,这样可以更轻松地进行进一步的请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      相关资源
      最近更新 更多