[英]How to count two queries with UNION ALL
I have this query: 我有这个查询:
SELECT ava_users.*, 0 AS ord
FROM ava_friend_requests
LEFT JOIN ava_users
ON ava_friend_requests.from_user = ava_users.id
WHERE ava_friend_requests.to_user = $user[id]
UNION ALL
SELECT ava_users.*, 1 AS ord
FROM ava_friends
LEFT JOIN ava_users
ON ava_friends.user2 = ava_users.id
WHERE ava_friends.user1 = $user[id]
ORDER BY ord
LIMIT $from, $display_num
As you can see there are two queries with a UNION ALL. 如您所见,有两个UNION ALL查询。
Now my question is: How do I count EACH query? 现在我的问题是:如何计算每个查询? How can I retrieve each count value?
如何获取每个计数值? I'd like to have a count result for query no 1 and a count result for query no2.
我想要查询1的计数结果和查询2的计数结果。
UPDATE: I would like to have a counting result like this: count 1: 34, count 2: 45 更新:我想有一个这样的计数结果:计数1:34,计数2:45
See here: select count from multiple tables 参见此处: 从多个表中选择计数
If you want to count the returned rows from the two subqueries, how about this: 如果要计算两个子查询返回的行,该如何处理:
SELECT 'Query1' as which, count(*) as cnt
FROM ava_friend_requests
LEFT JOIN ava_users
ON ava_friend_requests.from_user = ava_users.id
WHERE ava_friend_requests.to_user = $user[id]
UNION ALL
SELECT 'Query2', count(*)
FROM ava_friends
LEFT JOIN ava_users
ON ava_friends.user2 = ava_users.id
WHERE ava_friends.user1 = $user[id];
EDIT: 编辑:
To do this after the limit, make the current query a subquery and do the counting: 要在限制之后执行此操作,请将当前查询设为子查询并进行计数:
select ord, count(*) as cnt
from (SELECT ava_users.*, 0 AS ord
FROM ava_friend_requests
LEFT JOIN ava_users
ON ava_friend_requests.from_user = ava_users.id
WHERE ava_friend_requests.to_user = $user[id]
UNION ALL
SELECT ava_users.*, 1 AS ord
FROM ava_friends
LEFT JOIN ava_users
ON ava_friends.user2 = ava_users.id
WHERE ava_friends.user1 = $user[id]
ORDER BY ord
LIMIT $from, $display_num
) t
group by ord;
It also might be easier just to count the ord
column at the application level. 仅在应用程序级别计算
ord
列也可能会更容易。
You may want to try this: 您可能要尝试以下操作:
select count(*) from (SELECT ava_users.*, 0 AS ord
FROM ava_friend_requests
LEFT JOIN ava_users
ON ava_friend_requests.from_user = ava_users.id
WHERE ava_friend_requests.to_user = $user[id]
UNION ALL
SELECT ava_users.*, 1 AS ord
FROM ava_friends
LEFT JOIN ava_users
ON ava_friends.user2 = ava_users.id
WHERE ava_friends.user1 = $user[id]
ORDER BY ord
LIMIT $from, $display_num) as users;
This means to deal with you union all like a table and count all the elements. 这意味着要像对待表一样处理所有并统计所有元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.