在我的公共(public)投票数据库中,我有结构如下的 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' 的新自定义列,如果我有投票,如果我没有投票则为 NULL。
page_votes表中已经有一个user_id记录了哪个用户投票了。我如何使用它来获得 ID = 10 的特定用户的投票?
最佳答案
我建议使用表别名编写查询。那么你的问题的答案是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
没有投票时的值。
关于mysql - 根据ID选择用户投票栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50926523/