我有一张桌子,我们称之为posts
,其中包含帖子。这些帖子有title
,content
,date
(timestamp
)。它们可以被投票,因此可以为它们分配可变数量的upvotes。
我想要的是一种SQL方式来按time range
排序,然后按upvote
排序。所以基本上SQL请求必须返回:
是否可以在一个请求中执行此操作,实现它的最佳方法是什么?
答案 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语句中的列名之间使用逗号(,
)意味着首先列出的列号优先,然后是下一个(等等...)。