0

我有两个表“评论”和“喜欢”,我可以显示所有被喜欢的评论,并在添加评论时对它们进行排序。我目前似乎无法做的是根据评论被喜欢的时间来排序。

这就是我目前所拥有的:

SELECT * 
FROM comments AS c 
WHERE EXISTS (
    SELECT * 
    FROM likes AS l 
    WHERE c.commentID=l.commentID)

任何人都可以帮助我使用 SQL 来按顺序显示评论以及最近最喜欢的评论,依此类推...

只是添加 - 我只想显示一次评论,避免显示任何未被喜欢的评论。

4

3 回答 3

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),具体取决于您要查找的内容(最近喜欢与首次喜欢)。

于 2013-02-05T18:47:53.803 回答
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
于 2013-02-05T18:51:28.110 回答
0

由于您只想显示喜欢的评论,您可以这样做:

SELECT * FROM comments INNER JOIN likes USING(commentID) ORDER BY like_date DESC;
于 2013-02-05T18:52:20.590 回答