目前,我们有3个查询。在php中,我们遍历第一个,然后多次执行第二次,然后我想在一个查询中执行:
第一个查询是:
SELECT id FROM users
然后在循环结束这些结果,第二个是
SELECT id AS rid, count(recommendedById) FROM users WHERE id=$id
其中$ id是第一个查询中的users.id。
第三个查询是在第二个循环中执行的:
SELECT count(likes) AS likeCounter FROM posts WHERE author_id=$rid
和likeCounter总结为第一个查询。
任何人都可以将其纳入一个查询吗?
期望的结果 结果应该是每个用户一行,他推荐的用户数和他推荐的用户喜欢他们的帖子之和。
答案 0 :(得分:1)
你可以这样做:
SELECT u.id AS rid, count(recs.id), count(p.likes) AS likeCounter
FROM users u
LEFT JOIN posts p ON p.author_id=u.id
LEFT JOIN users recs ON recs.recommendedById=u.id
GROUP BY u.id
但是用户有一个id,您使用id
表中的users
。这不总是1?
答案 1 :(得分:1)
SELECT u.id,COUNT(DISTINCT ruid),sum(p.likes)
FROM users as u
LEFT JOIN (SELECT recommendedById as rid,id as ruid from users) as r ON r.rid = u.id
LEFT JOIN posts p ON p.author_id = ruid
GROUP BY u.id