表与SQL请求冲突

时间:2015-09-28 22:43:15

标签: mysql sql

我有5个表[结构]:

  • "媒体"存储图片[id,creatorID(创建媒体的用户),日期]
  • "喜欢"在图片上存储喜欢的内容[id,senderID(喜欢的用户),mediaID(喜欢的媒体)]
  • "注释"在图片[id,mediaID(媒体评论)]
  • 上存储评论
  • "按照"存储跟随[id,跟随(用户X),跟随(用户X的一个跟随)]
  • "用户"存储用户[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条评论。所以,我真的不知道如何解决它......

1 个答案:

答案 0 :(得分:1)

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

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

如果您有很多喜欢和评论,可以在加入或使用相关子查询之前更好地聚合。