这个主题似乎是一个受欢迎的主题,并且在相关帖子的数量方面肯定已经饱和了,但是,我已经为此工作了3天,我无法理解这一点。
我一直在搜索这个网站和其他许多有潜在解决方案的网站,有些正在执行,但我没有得到预期的结果。
这就是我要做的......
结果集应该会给我排名前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,我似乎无法使其中任何一个工作。
非常感谢任何人提供的任何帮助!
更新
这是结构和一些样本数据。
评论表(还有其他字段,但这些是重要的字段):
|用户名|评论|评级| productID |
| foo |这太棒了! | 5 | xxxx |
|吧|我不喜欢这个1 | xxxx |
| foo2 |没关系3 | xxxx |
| foo | bleh - 讨厌| 1 | xxxx |
reviewVotes Table(再次,比这更多的字段,但这些是重要的):
|用户名| voterUsername | productID |
| foo | foo2 | xxxx |
| foo2 | foo | xxxx | (这里的简单想法是一个用户正在投票另一个用户的帖子)
所以我需要计算用户在评论表中的评论数量,然后计算用户在reviewVotes表中的upvotes数量,然后按这两个数字的总和进行排序。
附加更新: 在上面的示例中,以下是预期结果:
用户名| #评论
foo | 2
吧| 1
foo2 | 1
用户名| #Up-Votes
foo | 1
foo2 | 1
用户名|总和
foo | 3
吧| 1
foo2 | 2
答案 0 :(得分:1)
尝试计算不同的评论和投票,如下所示:
SELECT
reviews.username,
COUNT(DISTINCT reviews.id) AS userReviewNum,
COUNT(DICTINCT reviewVotes.id) AS reviewVotesNum,
COUNT(DISTINCT reviews.id) + COUNT(DICTINCT reviewVotes.id) AS userRating
FROM
reviews
LEFT JOIN reviewVotes ON reviews.username = reviewVotes.username
GROUP by reviews.username
ORDER BY userRating DESC
LIMIT 10
答案 1 :(得分:0)
试试这个:
SELECT username, SUM(userReviewNum + reviewVotesNum) AS userRank
FROM (
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)
AS result_set
GROUP BY username
我认为该小组需要SUM才能工作。
答案 2 :(得分:0)
试试这个:
SELECT Res1.*, SUM(IF(reviewVotes.Username IS NULL, 0, 1)) AS UpVotes,
userReviewNum + SUM(IF(reviewVotes.Username IS NULL, 0, 1)) AS TotalSum FROM (
SELECT username, Count(*) AS userReviewNum
FROM reviews
GROUP BY username) AS Res1
LEFT OUTER JOIN reviewVotes ON res1.username = reviewVotes.username
GROUP BY Res1.username
ORDER BY TotalSum DESC
Vic G。
我是新来的。不知何故,我保存时会自动删除星号。它应该是Res1.asterisk
结果就是这样:
foo 2 1 3
foo2 1 1 2
bar 1 0 1