mysql - 表与 SQL 请求冲突

标签 mysql sql

我有 5 个表[结构]:

  • “medias”存储图片[id、creatorID(创建媒体的用户)、日期]
  • “喜欢”存储对图片的喜欢[id,senderID(喜欢的用户),mediaID(喜欢的媒体)]
  • “comments”存储对图片的评论[id, mediaID(媒体评论)]
  • “follow”存储关注[id, follow (用户 X), follow (用户 X 的一个关注者)]
  • “users”存储用户[id]

所有表均使用 ID 进行创建,该 ID 在插入时递增。

这是我为用户显示一系列图片的请求:

SELECT 
 m.id as mediaID, 
 COUNT(l.id) as likesCount, 
 COUNT(c.id) as commentsCount 
FROM medias m 
INNER JOIN follow f 
 ON f.follow = 'user_here' AND m.creatorID = f.following AND m.date < 'timestamp_here' 
INNER JOIN users u 
 ON u.id = m.creatorID 
LEFT JOIN likes x 
 ON m.id = x.mediaID AND x.senderID = 2 
LEFT JOIN likes l 
 ON m.id = l.mediaID 
LEFT JOIN comments c 
 ON m.id = c.mediaID 
GROUP BY m.id

当评论超过 1 条时,likesCount 取 commentsCount 的值。当我不喜欢一张图片时,commentCount 就会减少 1 条评论。所以,我真的不知道如何解决这个问题......

最佳答案

解决问题的简单方法是使用distinct:

SELECT m.id as mediaID, 
       COUNT(DISTINCT l.id) as likesCount, 
       COUNT(DISTINCT c.id) as commentsCount 

如果您有很多喜欢和评论,更好的方法可能是在加入之前进行聚合或使用相关子查询。

关于mysql - 表与 SQL 请求冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832946/

相关文章:

sql - Excel VBA 在Where子句之间使用

mysql - 为什么 EXPLAIN 的输出在每个 SHOW 索引后都会改变?

php - 循环遍历xml并将数据存储到MySQL表中

php - 跟踪页面浏览量并存储在 MySQL 中的最佳方式

python - 从我的 sql 检索数据并使用 python 将其发送到 Web 服务

mysql - WordPress - WP_query 计数

java - 基于子字符串过滤数据库结果在android中

php - MySQL中所有行都具有TRUE值后如何触发INSERT函数?

php - 如何将 "../"添加到 PHP echo img src

C# DateTime 默认值 Issue 01/01/0001 00 :00:00