mysql - 多次加入来收集用户评分?

标签 mysql join subquery rating

我有一个名为quotes的表:

id date       content
80 2012-06-03 This is the first quote.
81 2012-06-05 Lorem Ipsum.

还有一个名为“评级”的表:

rid uid qid rating
1   4   80  -1
2   4   81  1

uid 字段指的是进行该评分的登录用户。报价网站仅对登录用户可用,我希望能够向当前用户显示报价,包括指示报价当前评级的信息、他们是否对报价进行评级,以及如果有,他们的评级是什么它作为。评级可以是 -1 或 1。报价与提交报价的用户无关。

如果我只想获取一个报价,我会执行此查询(例如报价 80 和用户 4):

SELECT
  q.id AS qid, q.content, q.date,
  COALESCE(SUM(r.rating), 0) AS rating,
    (SELECT COALESCE(rating, 0) FROM ratings WHERE qid = 80 AND uid = 4 LIMIT 1)
      AS user_rated
  FROM quotes q
  LEFT JOIN ratings r ON q.id = r.qid
  WHERE q.id = 80
  GROUP BY q.id

我该如何修改它以显示多个报价(即不仅仅是报价 ID 80),但保留 user_lated 和评级信息?

非常感谢!

最佳答案

SELECT
  q.id AS qid,
  q.content,
  q.date,
  COALESCE(SUM(r.rating), 0) AS rating,
  COALESCE(SUM(IF(r.uid = 4, r.rating, NULL)), 0) AS user_rated
FROM quotes q
LEFT JOIN ratings r ON q.id = r.qid
GROUP BY q.id

关于mysql - 多次加入来收集用户评分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11540927/

相关文章:

php - 同一张表上的两个 JOINS

mysql - 左连接至少一行,条件来自右 mysql

使用带有动态数据的 "IN"关键字的 SQL 语法问题

mysql - 如何在MariaDB中选择每个组中的最新成员?

php - 导入大型数据集的性能提示

MYSQL 两个 SELECT 查询相减

mysql准备语句在执行stmt时没有重复变量使用

mysql - 我可以在 INSERT 查询中使用 SELECT 子查询吗?

c++ - boost 线程,测试线程是否准备好加入

mysql - 具有多个子查询的查询使我的系统挂起