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

时间:2015-06-09 18:13:43

标签: php mysql sql pdo union

我正在尝试执行一个SQL调用,该调用从一个表中获取一行并从另一个表中计算记录。但是,该调用仅返回第一个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

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

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

UNION不仅结合了两个表/子查询。它还可以删除重复项。所以,我解决问题的第一个猜测是:

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

答案 1 :(得分:1)

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

您的代码返回2行,每行一列。 但在PHP中,您调用了$query->fetch()。这只返回第一行。

选项1

使用$query->fetchAll()

获取两行

选项2

使用JOIN而不是UNION

将其设为两列