我想让我的数据库可以搜索。我的一些表格是产品,类别,子类别,制造商,型号,品牌。我在查询中使用“%like%”,然后在表中使用union。我得到了一个结果,但问题之一是我无法得到表名。我想到的一个解决方案是创建一个包含4列的可搜索表:id、可搜索术语(可以是sku、类别、子类别等)和可搜索术语的id。
doinxwow1#
您可以这样做: ...UNION ALL SELECT 'mytable' AS tablename, term FROM mytable ... 基本上,您可以在union的每个子选择中放入一个简单的字符串值和一个虚拟字段。在这种情况下,我只是叫它 tablename 值为 "mytable" 此示例表的名称。所以每一行 mytable 将添加一个名为 tablename 字符串值为 mytable . 然后,在合并结果时,每个结果集(子选择)可以有一个不同的字符串值(在 tablename )在各自表的查询中。你也可以参考这篇专门写在“虚拟专栏”上的文章如何使用mysql select创建虚拟列?我不知道我是否会说这是“正确”的方式,但它将粗暴地工作。享受
...UNION ALL SELECT 'mytable' AS tablename, term FROM mytable ...
tablename
"mytable"
mytable
r6hnlfcb2#
既然您已经在使用union,为什么不在每个union子查询中添加被查询表的名称作为列,如:
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\u name来获得每个记录从中返回的表的名称。注意:返回每一行的主键也是一个好主意,以使可能的进一步请求更容易。
2条答案
按热度按时间doinxwow1#
您可以这样做:
...UNION ALL SELECT 'mytable' AS tablename, term FROM mytable ...
基本上,您可以在union的每个子选择中放入一个简单的字符串值和一个虚拟字段。在这种情况下,我只是叫它tablename
值为"mytable"
此示例表的名称。所以每一行
mytable
将添加一个名为tablename
字符串值为mytable
. 然后,在合并结果时,每个结果集(子选择)可以有一个不同的字符串值(在tablename
)在各自表的查询中。你也可以参考这篇专门写在“虚拟专栏”上的文章
如何使用mysql select创建虚拟列?
我不知道我是否会说这是“正确”的方式,但它将粗暴地工作。
享受
r6hnlfcb2#
既然您已经在使用union,为什么不在每个union子查询中添加被查询表的名称作为列,如:
当您获得数据时,您可以通过检查列table\u name来获得每个记录从中返回的表的名称。
注意:返回每一行的主键也是一个好主意,以使可能的进一步请求更容易。