我正在尝试使数据库可搜索。我的一些表格是产品,类别,制造的子类别,型号,品牌。我在查询中使用“%LIKE%”,然后在表上进行合并。我得到了返回的结果,但是我无法获得表名的问题之一。我想到的一种解决方案是创建一个包含4列的可搜索表:
id,可搜索字词(可以是sku,类别,子类别等)和可搜索字词的ID。
答案 0 :(得分:1)
您可以这样做:
...UNION ALL SELECT 'mytable' AS tablename, term FROM mytable ...
基本上,您可以在联合的每个子选择中放入带有虚拟字段的简单字符串值。在这种情况下,我仅用示例表的名称为tablename
来命名为"mytable"
。
因此mytable
中的每一行都将添加一个名为tablename
的字段,其字符串值为mytable
。然后,当您合并结果时,每个结果集(子选择)在其各自表的查询中可能具有不同的字符串值(在tablename
中)。
您也可以参考这篇专门针对“虚拟列”的帖子
How to create virtual column using MySQL SELECT?
我不知道我是否会说这是“正确”的方法,但这将非常有用。
享受
答案 1 :(得分:0)
由于您已经在使用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来获取返回每个记录的表的名称。
注意:返回每一行的主键也是一个好主意,以使可能的进一步请求变得容易。