SQL UNION 仅返回第一个 SELECT 的结果

SQL UNION only returning result from first SELECT

我正在尝试执行一个 SQL 调用,该调用从一个 table 中获取一行并计算另一个 table 中的记录。但是,调用仅 returns 来自第一个 SELECT。代码如下:

$sql = "SELECT row_1 FROM table_1 WHERE user_id = :user_id
UNION
SELECT COUNT(row_2) as new_var FROM table_2 WHERE user_id = :user_id";

$query = $this->db->prepare($sql);
$params = array('user_id' => $var);
$query->execute($params);
$result = $query->fetch();

结果应该是:

array(
  'row_1' => val_1,
  'new_var' => val_2
)

问题的解决无疑很简单,但我却不知所措!提前致谢!

已解决!

在这种情况下,UNION 似乎不合适。修改 SQL 调用以使用 JOIN 解决了​​问题:

SELECT table_1.row_1, COUNT(table_2.row_2) AS new_var 
FROM table_1 LEFT JOIN table_2
ON table_1.user_id = table_2.user_id AND table_1.user_id = :user_id

感谢您的帮助!

如果我不得不猜测,那么 row_1 是一个整数,其中一个值与计数完全匹配。

UNION不仅合并了两个tables/subqueries。它还会删除重复项。所以,我对解决问题的第一个猜测是:

SELECT row_1 FROM table_1 WHERE user_id = :user_id
UNION ALL
SELECT COUNT(user_id) as new_var FROM table_2 WHERE user_id = :user_id

注意:您还应该确定哪些行是原始数据行,哪些是摘要行。 SQL 中的结果集是 无序的 。不能保证行将按特定顺序返回——除非您使用 ORDER BY.

根据您的脚本,您似乎想要 2 列。一位 row_1,一位 count(user_id)。如果是,则 UNION 不是正确的运算符。

您的代码 returns 2 行,每行一列。 但是在你的 PHP 中你调用了 $query->fetch()。那只有returns第一行。

选项 1

使用 $query->fetchAll()

获取两行

选项 2

使用 JOIN 而不是 UNION

使其成为两列