2012-04-27 82 views
0

我想通過他們的時間戳命令我的帖子,但那不是,我不知道爲什麼。 當我執行我的查詢沒有秩序,它的工作原理,但是當我添加ORDER BY它不起作用。ORDER BY MySQL和時間戳

這是我的查詢:

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

datePosts是什麼數據類型? – Daniel 2012-04-27 12:55:10

+0

它是時間戳類型 – Guillaume 2012-04-27 12:57:41

回答

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 
+3

注意:第二個查詢在性能方面非常差,不應使用**,也無需切換訂單/限制訂單。 – 2012-04-27 13:01:15

+2

它不應該使用,它幾乎沒有用,它沒有任何意義。這僅僅是爲了學術目的,並且爲了理解爲什麼第一個查詢確實有意義。 – Konerak 2012-04-27 13:05:23

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; 

限制必須應用到查詢的最後一件事,所以爲了通過需求是第一位的。

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;