【发布时间】:2018-09-20 18:41:16
【问题描述】:
我有一个查询,它为我的 CMS 中的循环加载数据以显示帖子。在我离开评论栏之前,投票栏中的一切都运行良好。评论显示正常,但总票数、赞成票和反对票数都大打折扣。如果您需要查看表格,请告诉我。
SELECT
count(DISTINCT comment.comment ) AS Comment,
idea.dateofcreation AS timestamp,
idea.userId AS userId,
idea.id AS ID,
idea.text AS Idea,
page.permalink AS Permalink,
user.name AS Username,
COUNT(CASE WHEN votelog.vote !="" THEN 1 END) AS 'totalvotes',
COUNT(CASE WHEN votelog.vote = '1' THEN 1 END) AS 'upvote',
COUNT(CASE WHEN votelog.vote = '-1' THEN 1 END) AS 'downvote'
FROM idea
LEFT JOIN votelog ON idea.id = votelog.ideaid
LEFT JOIN user ON idea.userId = user.id
LEFT JOIN page ON idea.id = page.ideaid
LEFT join comment ON comment.ideaid = idea.id
GROUP BY idea.id
ORDER BY totalvotes DESC
【问题讨论】:
-
因为 cmets 可能在您的用户/页表中包含许多记录,因此您的计数会针对 cmets 表中的每条记录与您之前的记录相加。尝试在 where 子句中仅使用一个页面/用户进行测试,您将能够看到它
-
" 因为 cmets 中可能有很多记录到您的用户/页表中的记录,所以您的计数将被添加到 cmets 表中的每条记录与您之前的记录相比“好吧@
COUNT中的 987654322@ 应该抵消(通常)@Brad .. 所以他可以这样做COUNT(DISTINCT CASE WHEN votelog.vote !="" THEN 1 END) AS 'totalvotes',.. 但最好使用像 Gordon Linoff's answer 这样的交付表(子查询)方法 -
计数不是他所说的问题,而是他有问题的赞成/反对票,而且他没有考虑在逻辑的那部分添加的 cmets。跨度>
-
注意我说的@Brad "@Brad .. "所以他可以做 COUNT(DISTINCT CASE WHEN votelog.vote !="" THEN 1 END) AS 'totalvotes',"
-
对不起,我在您完成评论之前回复了您指出的详细信息。
标签: mysql sql database content-management-system