在我的公众投票数据库中,我有以下结构的pages和pages_votes表: -
网页
页面投票
我正在查询mysql数据库,以获得所有页面的结果,包括正面和负面投票的总和
正投票为1,反对投票为0
我的查询如下: -
SELECT pages.id, pages.title, COUNT(pv.page_id) AS `total_count`, SUM(pv.vote=1) AS `likes`, SUM(pv.vote=0) AS `dislikes`
FROM `pages`
LEFT JOIN `pages_votes` AS `pv` ON `pages`.`id` = `pv`.`page_id`
GROUP BY `pages`.`id`, `pages`.`title`, `pages`.`slug`, `pages`.`image`
ORDER BY `total_count` DESC;
现在我想在此结果中添加一个名为'my_vote'的新自定义列,我的投票会将我的投票(user_id = 3)显示为1或0,如果我有喜欢/不喜欢投票,如果我没有投票,则为NULL。
page_votes表中已经有一个user_id记录了哪个用户投票。如何使用它来获得ID = 10的特定用户的投票?
答案 0 :(得分:3)
我建议用表别名编写查询。然后,您的问题的答案是CASE
表达式:
SELECT p.id, p.title, COUNT(pv.page_id) AS total_count,
SUM(pv.vote =1 ) AS likes, SUM(pv.vote = 0) AS dislikes,
SUM(CASE WHEN pv.vote = 1 AND p.user_id = 3 THEN 1
WHEN pv.vote = 0 AND p.user_id = 3 THEN 0
END) as user_3_vote
FROM pages p LEFT JOIN
pages_votes pv
ON p.id = pv.page_id
GROUP BY p.id, p.title
ORDER BY total_count DESC;
请注意,这使用SUM(CASE . . .)
而不是SUM( <boolean expression> )
。这很重要,因此您可以在没有投票时获得NULL
值。
答案 1 :(得分:0)
您会在查询中考虑一个小变化吗?获得指定的输出。
SELECT pages.id, pages.title, COUNT(pv.page_id) AS `total_count`,
SUM(case when pv.vote = 1 then 1 else 0 end) AS `likes`,
SUM(case when pv.vote = 0 then 1 else 0 end) AS `dislikes`
FROM `pages`
LEFT JOIN `pages_votes` AS `pv`
ON `pages`.`id` = `pv`.`page_id`
GROUP BY `pages`.`id`, `pages`.`title`, `pages`.`slug`, `pages`.`image`
ORDER BY `total_count` DESC;