1

我对 mysql 寻呼机有一些问题。

  • 计数所有行为 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,所以结果计数是 ok 的。
  • 限制为 200 的查询返回所有有效行(164 行不重复)。

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

谢谢你。

4

1 回答 1

3

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

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

ORDER BY pro_type DESC, pro DESC, cr_date DESC, ID
------------------------------------------------^
LIMIT 100;
于 2015-05-11T10:47:14.987 回答