我想通过他们的时间戳订购我的帖子,但那不是,我不知道为什么。 当我在没有订单的情况下执行我的查询时,它可以工作,但是当我添加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;
为什么不起作用?
答案 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;