after 4 days of tries and researchs over the web I can't make my wishes working.
Any help would be appreciated !
Performed on MYSQL WORKBENCH
I got a DB made of 3 tables :

user Posts likes
username id id
id title userId (foreign key from user.id)
email content postId (foreign key from posts.id)
password date
image imageUrl
userId (foreign key from user.id)

我想要一个查询,将采取从用户和帖子的具体数据,加上总计数的喜欢为每一个帖子的id排序后,如果没有喜欢这个id存在的总结果为0.

  • 在用户和帖子中 Select 具体数据;( working )
  • 计算每个帖子的赞总数,如果任何帖子没有赞,给我一个0;

我的实际问题是:

SELECT P.id, P.userId, P.title, P.content, P.date, P.imageUrl, U.username, U.permission, U.image,
COUNT(CASE WHEN L.postId = P.id THEN 1 ELSE NULL END) AS totalLikes
FROM posts AS P
LEFT JOIN user AS U
ON U.id = P.userId
LEFT JOIN likes AS L
ON P.id = L.postId
ORDER BY P.id DESC;

这篇文章只返回了一篇文章,包含了数据库中所有喜欢的内容,所以这不是我所期望的:-(

推荐答案

仅在likes内进行聚合,然后将其他表连接到聚合的结果集:

SELECT P.id, P.userId, P.title, P.content, P.date, P.imageUrl, 
       U.username, U.permission, U.image,
       COALECE(L.totalLikes, 0) AS totalLikes
FROM posts AS P
INNER JOIN user AS U ON U.id = P.userId  -- change to LEFT JOIN if the column userId in posts is nullable
LEFT JOIN (
  SELECT postId, COUNT(*) AS totalLikes
  FROM likes 
  GROUP BY postId
) AS L ON L.postId = P.id
ORDER BY P.id DESC;

Mysql相关问答推荐

优化使用ORDER BY加载耗时较长的MySQL请求

无法删除或更新父行:外键约束无法删除表

根据上一行S列结果计算列的查询

LaravelEloquent ToSql()缺少连接表

MySQL工作台的编码问题

最终的自联表是如何记住关联的呢?

SQL:如何 Select 每个客户最后购买的产品?

根据使用 mysql 的第一个过滤结果添加更多表行

总行大小不超过 65535,但我得到行大小太大.所用表类型的最大行大小,不包括 BLOB,是 65535错误

从 SQL 中的左连接和内连接中减go 计数

SQL 查找边界之间的值

MySQL Workbench - 如何同步 EER 图

MySql - 默认情况下主键是唯一的吗?

PHP PDO 与普通 mysql_connect

Doctrine2 迁移向下迁移并从浏览器而不是命令行迁移

Mysql中int(10)的最大大小是多少

在 WHERE 子句中使用 mysql concat()?

如何将具有相同列值的mysql行分组为一行?

如何通过一个语句描述数据库中的所有表?

在 PHP 中运行 MySQL *.sql 文件