我有两个表'评论'和'喜欢',我可以显示所有喜欢的评论,并在添加评论时按顺序排序。我现在似乎无法做的是根据喜欢的时间订购评论。
这就是我现在所拥有的:
SELECT *
FROM comments AS c
WHERE EXISTS (
SELECT *
FROM likes AS l
WHERE c.commentID=l.commentID)
任何人都可以帮我用SQL来显示评论顺序与最近最喜欢的评论等等......
只是添加 - 我只想显示评论一次,避免显示任何不喜欢的评论。
答案 0 :(得分:4)
您想加入表格。
SELECT comments.*
FROM comments JOIN likes ON comments.commentID = likes.commentID
GROUP BY comments.commentID
ORDER BY MAX(likes.date) DESC;
JOIN
使用评论和喜欢的所有字段创建行。如果您使用LEFT JOIN
,则会包含不受欢迎的评论,但使用普通JOIN
应该可以执行您想要的操作。
GROUP BY
折叠行,因此每条评论只有一个。
ORDER BY
按类似日期对行进行排序。我使用了MAX(likes.date)
,因为您可能会为每条评论设置很多日期,并且您想要选择一个特定日期。您也可以尝试MIN(likes.date)
,具体取决于您要查找的内容(最近喜欢vs首先喜欢的内容)。
答案 1 :(得分:3)
如果您对给定评论有多个喜欢,则需要聚合,例如:
SELECT c.*
FROM comments c join
(select l.commentId, MIN(likedate) as FirstLikeDate, MAX(likedate) as MaxLikeDate
from likes l
group by l.commentId
) l
on c.commentId = l.CommentId
order by MaxLikeDate desc
答案 2 :(得分:0)
由于您只想显示喜欢的评论,您可以这样做:
SELECT * FROM comments INNER JOIN likes USING(commentID) ORDER BY like_date DESC;