0

タイムスタンプで投稿を並べ替えたいのですが、そうではなく、理由がわかりません。注文なしでクエリを実行すると機能しますが、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;

なぜそれがうまくいかないのですか?

4

3 に答える 3

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
于 2012-04-27T12:56:10.183 に答える
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;

limit はクエリに最後に適用する必要があるため、order by を最初に指定する必要があります。

于 2012-04-27T12:55:33.227 に答える
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;
于 2012-04-27T12:57:53.500 に答える