使数据库可搜索的正确方法是什么?

时间:2018-12-31 20:55:13

标签: php mysql laravel

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

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

2 个答案:

答案 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来获取返回每个记录的表的名称。

注意:返回每一行的主键也是一个好主意,以使可能的进一步请求变得容易。