我有这个SQL查询:
SELECT count(commentratings.ID) AS count, user_ID FROM `commentratings`
WHERE comment_ID = ANY (SELECT ID FROM `ratings` WHERE user_ID = 2) AND rating_direction = 1
它返回user_ID = 2的用户的投票数(如预期)。
我不仅要为该特定用户,而且要为数据库中的所有用户获得此计数。我得到所有相关的ID
SELECT user_ID from users
如何更改第一个查询,以使其返回所有用户的所有计数?我想那一定是某种for循环,它会循环子查询中的ID。伪代码:
for i in (SELECT user_ID from users):
SELECT count(commentratings.ID) AS count, user_ID FROM `commentratings`
WHERE comment_ID = ANY (SELECT ID FROM `ratings` WHERE user_ID = i) AND
rating_direction = 1
如何使用SQL实现此功能? 非常感谢!
答案 0 :(得分:0)
在原始查询之后,您可以执行另一个子查询:
SELECT count(commentratings.ID) AS count, user_ID
FROM `commentratings`
WHERE comment_ID = ANY (SELECT ID
FROM `ratings`
WHERE user_ID in (SELECT user_ID from users))
AND rating_direction = 1
尽管,我认为您的第一个查询使用联接会更好,但是我可能无法完全了解数据库模型是什么。
答案 1 :(得分:0)
尝试类似的东西:
select users.user_id,
count(*) num_upvotes
from users
left outer join ratings on ratings.user_id = users.user_id
where ratings.rating_direction = 1
group by users.user_id
答案 2 :(得分:0)
如果您要像for循环那样遍历列的每个值,则可以使用cursor
看起来像这样
DECLARE @UserID int
DECLARE UserIDs CURSOR LOCAL FOR SELECT user_ID from users
OPEN UserIDs
FETCH NEXT FROM UserIDs into @UserID
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT count(commentratings.ID) AS count, user_ID FROM `commentratings`
WHERE comment_ID = ANY (SELECT ID FROM `ratings` WHERE user_ID = @UserID) AND rating_direction = 1
FETCH NEXT FROM UserIDs into @UserID
END
CLOSE UserIDs
DEALLOCATE UserIDs