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


SQL UNION only returning result from first SELECT

我试图执行一个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列。一个是row_1,一个是count(user_id)。如果是,则UNION不是正确的操作符。

你的代码,因为它站返回2行,每一列。但是在PHP中,你调用$query->fetch()。它只返回第一行。

选项1

同时取$query->fetchAll()

选项2

JOIN代替UNION使它成为两列

如果我必须猜测,那么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