gpt4 book ai didi

具有多个ORDER BY的Mysql分页

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:34 26 4
gpt4 key购买 nike

我的 mysql pager 有一些问题。

  • 计数所有行是 164。
  • pro_type - 可以是 3 个不同的整数值;
  • pro - 整数值;
  • cr_date - 某个日期。

这是我的查询:

SELECT id FROM table WHERE f1='1' AND f2='0' AND uid=43 ORDER BY pro_type DESC, pro DESC, cr_date DESC LIMIT 100;

SELECT id FROM table WHERE f1='1' AND f2='0' AND uid=43 ORDER BY pro_type DESC, pro DESC, cr_date DESC LIMIT 100 OFFSET 100;
  • 第二个查询结果与第一个查询结果有重复的行。
  • 两个结果都不包含一行或几行。
  • 第一个查询的行数是100,第二个是64,所以结果数是可以的。
  • 限制为 200 的查询返回所有有效行(164 行不重复)。

也许有人知道,在那种情况下 ORDER BY & LIMIT OFFSET 有什么问题?

谢谢。

最佳答案

基本上,可能发生的情况是数据具有 pro_type、pro、cr_date 的重复值。当您使用 order by 并且键相同时,MySQL 不保证具有相同键值的结果的顺序。换句话说,排序是不稳定的。

假设 id 是唯一的,解决方案就是将它添加到 order by 子句中,以便排序键是唯一的:

ORDER BY pro_type DESC, pro DESC, cr_date DESC, ID
------------------------------------------------^
LIMIT 100;

关于具有多个ORDER BY的Mysql分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30165596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com