我有一个插件,可以计算我网站上评论的有用票数(“有帮助”、“有趣”、“酷”,它还提供了添加其他描述符的选项。所以我添加了“无帮助” .
现在,我正在尝试自定义用于显示得票最多的评论的查询,方法是考虑“无帮助”投票(从有帮助的投票中减去它们),而不是仅仅计算所有投票的总数。
所以最初用于此的查询是:
SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` GROUP BY review_id ORDER BY count DESC LIMIT 5
而且我发现我可以计算有用的投票(其中“评分”列中的数字为 0、1 或 2),如下所示:
SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` <3 GROUP BY review_id ORDER BY count DESC LIMIT 5
我可以计算无帮助的投票(其中“比率”列中的数字为 3),如下所示:
SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` >2 GROUP BY review_id ORDER BY count DESC LIMIT 5
但我不知道如何组合这两个 select 语句,以便前 5 个“计数”结果显示每个查询的计数差异。
我不需要并集,因为没有进行减法,并且我尝试了多个选择的各种排列,但无法解决这个问题。
有什么建议吗?
示例表:Example Table
在上面的例子中,如果所有投票都是盲目计算的,则评论 #4 的排名高于评论 #10,但如果考虑到无用的投票,则 #10 的排名会比评论高,净总数为 1 #4 的净总数为 0。
有道理吗?
最佳答案
试试这个:
select a.review_id,b.review_id,a.count,b.count from
(SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` <3 GROUP BY review_id ORDER BY count DESC LIMIT 5) as a
left join
(SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` >2 GROUP BY review_id ORDER BY count DESC LIMIT 5) as b
on a.review_id = b.review_id
如果第一个查询的 review_id
= 第二个查询的 review_id
,则此操作有效,否则您也可以使用 <> 来两者
。
其他选项使用union all
SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` <3 GROUP BY review_id ORDER BY count DESC LIMIT 5
union all
SELECT review_id, COUNT(*) AS count FROM `wp_reviews_ratings` where `rate` >2 GROUP BY review_id ORDER BY count DESC LIMIT 5
关于mysql - 用算术组合两个 SQL 语句(本身不是连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44401500/