按时间范围周期排序按SQL请求,然后按其他标准排序

时间:2014-11-10 17:18:18

标签: mysql sql-order-by

我有一张桌子,我们称之为posts,其中包含帖子。这些帖子有titlecontentdatetimestamp)。它们可以被投票,因此可以为它们分配可变数量的upvotes。

我想要的是一种SQL方式来按time range排序,然后按upvote排序。所以基本上SQL请求必须返回:

  • 今天的帖子(假设时间范围是一天)由upvotes desc命令,然后是昨天由upvotes desc命令的帖子等等......

是否可以在一个请求中执行此操作,实现它的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以将多个列放入ORDER BY子句中,只要它们以逗号分隔即可。我想你正在寻找这样的东西:

SELECT title, content, DATE(date) AS postDate, upvotes
FROM posts
ORDER BY postDate DESC, upvotes DESC;

这将把今天的日期放在第一位,并在其中首先以最大的赞成票数发布。

DATE()函数会拉出时间戳值的日期部分,这是我认为你想要的,所以无论时间如何,帖子都会按日期放在一起。

虽然,你说帖子可以有upvotes,但你没有把它列为你的一个列。我的回答假定upvotes是post表中的一列。如果不是,并且您不知道如何获得该价值,请告诉我,我可以尝试帮助您。

答案 1 :(得分:0)

这个SQL语句应该可以编辑到你想要的东西:

SELECT *
FROM posts
ORDER BY 
    date DESC,   // Favour the newest date
    upvote DESC      // Now get the one with most upvotes

默认情况下,SQL会按升序排序,而在您的情况下,您希望它们降序,因此需要DESC。

在ORDER BY语句中的列名之间使用逗号(,)意味着首先列出的列号优先,然后是下一个(等等...)。