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
使其成为两列
我正在尝试执行一个 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