ORDER BY MySQL和时间戳

时间:2012-04-27 12:53:51

标签: mysql timestamp sql-order-by

我想通过他们的时间戳订购我的帖子,但那不是,我不知道为什么。 当我在没有订单的情况下执行我的查询时,它可以工作,但是当我添加ORDER BY时它不起作用。

这是我的疑问:

SELECT * FROM Posts INNER JOIN Topics ON idTopic = idTopics  
INNER JOIN Users ON idUserPosts = idUsers
WHERE idTopic = :idTopic LIMIT :limit_down, :limit_up 
ORDER BY Posts.datePosts DESC;

为什么不起作用?

3 个答案:

答案 0 :(得分:2)

尝试反转ORDER BY / LIMIT:

SELECT * FROM Posts 
INNER JOIN Topics ON idTopic = idTopics  
INNER JOIN Users ON idUserPosts = idUsers
WHERE idTopic = :idTopic 
ORDER BY Posts.datePosts DESC
LIMIT :limit_down, :limit_up;

需要在限制之前的顺序,否则限制不太有用:你得到表的第一行X,但是“第一”使用什么标准?然后你会订购这些结果。

你也可以这样做,如果你真的想,但想想你现在在做什么:

SELECT * FROM (
    SELECT Posts.datePosts orderField, * FROM Posts 
    INNER JOIN Topics ON idTopic = idTopics  
    INNER JOIN Users ON idUserPosts = idUsers
    WHERE idTopic = :idTopic 
    LIMIT :limit_down, :limit_up;
)
ORDER BY orderField DESC

答案 1 :(得分:1)

试试这个:

SELECT * FROM Posts INNER JOIN Topics ON idTopic = idTopics  
INNER JOIN Users ON idUserPosts = idUsers
WHERE idTopic = :idTopic
ORDER BY Posts.datePosts DESC
LIMIT :limit_down, :limit_up;

限制必须是应用于查询的最后一件事,因此需要先排序。

答案 2 :(得分:0)

似乎dateposts是一个日期字段,那么为什么不尝试这个

SELECT * FROM Posts INNER JOIN Topics ON idTopic = idTopics  
INNER JOIN Users ON idUserPosts = idUsers
WHERE idTopic = :idTopic LIMIT :limit_down, :limit_up 
ORDER BY DATE(Posts.datePosts) DESC;