我有 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/