这个话题似乎很受欢迎,并且在相关帖子的数量方面绝对饱和,但是,我已经为此工作了 3 天,但我无法弄清楚这一点。
我一直在搜索这个网站和许多其他可能的解决方案,其中一些正在执行,但我没有得到预期的结果。
这就是我想要做的......
- SELECT 和 COUNT 用户在评论表中提交的评论数。
- SELECT 和 COUNT 用户在 reviewVotes 表中的赞成票数。
- GROUP BY 用户名(这是两个表中的键 - 用户名是唯一的,但存在于多行中)。
- 按这些 COUNTs DESC 的总和对结果集进行排序。(这是我一直在尝试的,但甚至无法执行,所以我现在通过 userReviewNum DESC 订购。)
- 将结果集限制为前 10 个。
结果集应该给我前 10 名评论者,这是由评论数量加上 (+) 投票数计算得出的。
这是我执行的最新尝试,但似乎是乘以 userReviewNum * reviewVotesNum 并且我需要它来添加它们(但我在尝试包含 SUM 命令时都非常不成功 - 事实上太糟糕了,我什至都不好意思展示我的尝试)。
SELECT
reviews.username,
count(reviews.username) userReviewNum,
count(reviewVotes.username) reviewVotesNum
FROM reviews
LEFT JOIN reviewVotes ON reviews.username = reviewVotes.username
GROUP by reviews.username
ORDER BY userReviewNum DESC
LIMIT 0, 10
我试过使用 JOIN 和 UNION ,但我似乎无法让它们中的任何一个工作。
非常感谢任何人可以提供的任何帮助!
更新:
这是结构和一些示例数据。
评论表(还有其他字段,但这些是重要的):
| 用户名 | 评论 | 评级 | 产品ID |
| 富 | 这太棒了!| 5 | xxxx |
| 酒吧 | 我不喜欢这个| 1 | xxxx |
| foo2 | 没关系 | 3 | xxxx |
| 富 | bleh - 讨厌 | 1 | xxxx |
reviewVotes 表(同样,比这更多的字段,但这些是重要的):
| 用户名 | 选民用户名 | 产品ID |
| 富 | foo2 | xxxx |
| foo2 | 富 | xxxx | (这里的简单想法是一个用户正在投票给另一个用户的帖子)
所以我需要计算用户在Reviews 表中的评论数,然后计算用户在reviewVotes 表中的upvotes 数,然后按这两个数字的总和排序。
附加更新: 在上面的示例中,以下是预期结果:
用户名 | # 评论
富 | 2
酒吧 | 1
foo2 | 1
用户名 | # 赞成票
富 | 1
foo2 | 1
用户名 | 总和
富 | 3
酒吧 | 1
foo2 | 2