mysql - 根据ID选择用户投票栏

标签 mysql sql join

在我的公共(public)投票数据库中,我有结构如下的 pages 和 pages_votes 表:-
页面
page table
页面投票
enter image description here


我正在查询 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;


结果看起来像这样(这里没有问题):-
enter image description here

现在我想在此结果中包含一个名为 '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/

相关文章:

php - PHP PDO 的 Mysql 转义 % 和 _

javascript - 使用 Node.JS 获取对象对象检索/格式化 MySQL

php - 当名字和姓氏在不同字段中时,使用 PHP 在数据库中搜索全名

mysql - 加入未知表名

iphone - iPhone 中的数据库连接

php - 连接 MySQL 表并计算计数 - PHP 中的输出

sql - 像列 2 一样在列 1 上内连接两个表,后跟非字母表

mysql - 在MySQL查询中获取子字符串

sql - 仅按人名过滤

SQL - JOIN 两个结果表,重构的想法?