MySQL UNION查询中的行名称相同

法克斯

我正在构建一个简单的PHP搜索引擎,它将在多个表中进行搜索。有些表具有相同的列名,因此我开始使用“ AS”来标识每个表。

这是我正在使用的查询:

$query = " (SELECT coluna1 as txt1_festival, coluna2 as txt2_festival, 'festival' as tabela FROM tb_festival WHERE coluna1 LIKE '%" . $buscar . "%' OR coluna2 LIKE '%" . $buscar ."%') 
    UNION
(SELECT pergunta, resposta, 'faqs' as tabela FROM tb_faqs WHERE pergunta LIKE '%" . $buscar . "%' OR resposta LIKE '%" . $buscar ."%')";

问题是,即使结果来自第二个表,列名称分别是pergunta和resposta,我却获得了具有相同列名txt1_festival和txt2_festival的所有结果。

谁能告诉我该怎么做?!

萨沙

如果我正确理解了您想要什么...

您可以使用以下方式:

$query = "
    (SELECT coluna1 as txt1_festival, coluna2 as txt2_festival, null as pergunta, null as resposta, 'festival' as tabela FROM tb_festival WHERE coluna1 LIKE '%" . $buscar . "%' OR coluna2 LIKE '%" . $buscar ."%') 
    UNION
    (SELECT null as txt1_festival, null as txt2_festival, pergunta, resposta, 'faqs' as tabela FROM tb_faqs WHERE pergunta LIKE '%" . $buscar . "%' OR resposta LIKE '%" . $buscar ."%')
";

但是恕我直言,这是一种奇怪的方式。如果必须在多个表中搜索某些内容(结构和列数可能会有所不同),最好运行几个查询。


事实是查询结果的“结构”(即列数,它们的名称和类型)必须是可确定的,而无需执行查询。

即假设您具有tbl1带字段的(id integer, creation_time timestamp, val1 text, val2 text)并要执行查询SELECT id, id+2 as id_plus_2, creation_time AS cr_time FROM tbl1即使不执行查询,RDBMS也将理解结果结构应为(id integer, id_plus_2 integer, cr_time timestamp)

因此,您无法执行以下操作:

SELECT id, val1 AS 〈I_wanna_name_this_column_as_qq_if_id_is_less_than_17_and_as_pp_otherwise〉, val2 FROM tbl1;

要么:

SELECT id, val1, val2 AS 〈I_wanna_name_this_column_as_qq_if_today_is_tuesday_and_as_pp_otherwise〉 FROM tbl1;

与使用UNION的查询相同。RDMBS必须在读取查询后立即知道UNION查询结果的结构(假设它已经知道表的结构)。因此,即使在执行UNION查询之前:

  • RDMBS尝试确定整个UNION查询将返回的列数(通过查看期望特定SELECT查询返回的列数)。如果期望UNION查询中的两个SELECT查询返回不同的列数-这是错误的。
  • RDMBS尝试确定整个UNION查询将返回的列的类型(通过查看期望特定SELECT查询返回的列的类型)。如果UNION查询中两个SELECT查询中对应列的类型过于不同(RDBMS无法将它们强制转换为通用超类型)—这是错误的。
  • RDMBS尝试确定整个UNION查询将返回的列的名称(通过查看预期将返回特定SELECT查询的列的名称)。如果UNION查询中两个SELECT查询中对应列的名称不同-并不是那么重要,则RDBMS会采用第一个。(从理论上讲,它并不那么重要,而以另一种方式设计的RDBMS将采用第二种,甚至以某种方式将它们组合在一起-但事实是必须知道所有列名称,而不执行查询。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySql查询2列中具有相同值的行

来自分类Dev

MYSQL查询-UNION中的ORDER BY-降序

来自分类Dev

mysql UNION查询输出

来自分类Dev

mysql UNION查询输出

来自分类Dev

mysql查询中的PHP变量名称

来自分类Dev

如何根据相同数组的值从foreach上的mysql查询结果中删除行

来自分类Dev

当使用Join且2个表的字段名称相同时,如何在MYSQL查询中查明正确的结果?

来自分类Dev

如何在MySQL中执行动态UNION查询?

来自分类Dev

MySQL UNION查询语法问题

来自分类Dev

禁用 MySQL 的 UNION SELECT 查询

来自分类Dev

mysql查询选择多个列值相同的行

来自分类Dev

MySQL在查询中获取行位置

来自分类Dev

动态行中的MySQL Pivot表查询

来自分类Dev

PHP Mysql查询行中的特殊字符

来自分类Dev

在MySQL SELECT查询中还包括NULL行

来自分类Dev

MySQL查询以获取表中的行位置

来自分类Dev

MySQL在查询中获取行位置

来自分类Dev

从MySQL查询中获取行的数组?

来自分类Dev

mysql查询行中的总和值

来自分类Dev

如何避免mySQL中的多个几乎相同的子查询

来自分类Dev

MySQL总和加上相同查询中的计数

来自分类Dev

使用'regexp'的相同查询在mysql中给出不同的结果

来自分类Dev

在单个查询中两次更新相同的mysql字段

来自分类Dev

使用'regexp'的相同查询在mysql中给出不同的结果

来自分类Dev

MySQL相同的查询不同的条件

来自分类Dev

MySQL查询中的动态字段名称选择

来自分类Dev

MySQL查询中的动态字段名称选择

来自分类Dev

从mysql中的自定义查询输出列名称

来自分类Dev

查询同一表中的特定名称(MySQL)