web-dev-qa-db-ja.com

MySQL 5.5と5.6、5.7は同じデータベースで同じクエリですが出力が異なり、IDが重複しています

WordPressで同じソースコードと同じデータベースを実行していますが、mysqlのバージョンのみが異なります。それは私のページネーションの投稿に重複があります。これが私が見つけたものです。より高いバージョンでそれを解決する方法はありますか?

これは、ページ2およびページ3のクエリ出力用です。左側はMySql 5.5、右側はMySql 5.6です。 up_posts.IDは一意です。

SQLステートメント:-

SELECT SQL_CALC_FOUND_ROWS up_posts.ID FROM up_posts  WHERE 1=1  AND up_posts.post_type = 'post' AND (up_posts.post_status = 'publish' OR up_posts.post_status = 'closed' OR up_posts.post_status = 'private' OR up_posts.post_status = 'hidden')  ORDER BY up_posts.post_date DESC LIMIT 10, 10

SELECT SQL_CALC_FOUND_ROWS up_posts.ID FROM up_posts  WHERE 1=1  AND up_posts.post_type = 'post' AND (up_posts.post_status = 'publish' OR up_posts.post_status = 'closed' OR up_posts.post_status = 'private' OR up_posts.post_status = 'hidden')  ORDER BY up_posts.post_date DESC LIMIT 20, 10

ページ2:-違いはLIMIT 10,10 Page 2

ページ3:-違いはLIMIT 20,10 Page 3 - as you can see ID:62728 & 62737 appear again in Page 3

MySQL 5.5はIDでソートするようですが、上記の5.6にはこの機能がありません。

3
Shiro

追加ORDER BY up_posts.post_date DESC, up_posts.ID DESC重複する結果はもうありません。不要な問題を回避するために手動で追加する必要があるようです。

ご参考までに。 MySQL 5.6および5.7に適用されました。

を参照してください8.2.1.16 LIMITクエリの最適化

主キーで並べ替える場合は、明示的に指定する必要があります。

2
Shiro