MySQL EXISTS和ORDER BY

时间:2013-02-05 18:44:03

标签: mysql sql subquery

我有两个表'评论'和'喜欢',我可以显示所有喜欢的评论,并在添加评论时按顺序排序。我现在似乎无法做的是根据喜欢的时间订购评论。

这就是我现在所拥有的:

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

任何人都可以帮我用SQL来显示评论顺序与最近最喜欢的评论等等......

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

3 个答案:

答案 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;