赞
踩
SELECT id, org_id, name, type, type_id, create_time
FROM jmzl_tag
WHERE (type = 0 AND org_id IN (284, 272))
order by create_time desc
如图所示,一共是24条数据,按照创建时间倒序,需要注意的是创建时间(create_time)中有些是相同的。
分页查询,一页10条
第二页数据
第三页数据
问题:可以看到第二页和第三页数据出现重复
数据库order by
排序不唯一,会导致最终的数据排序是不是稳定的。只有保证order by
排序唯一,才会导致结果不重复
对于limit
来说它是MySQL
数据库顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。其实简单的说就是,你去查数据库,limit
就是MySQL
根据返回数据的顺序给他的一个编号,谁先返回谁就是1,如果不存在order by
排序条件那么它就是MySQL
的存储顺序。
当本文中取出的数据的create_time
这个字段的值是一样的时候,MySQL
在返回数据时,返回数据顺序不是固定的,我们取前8个数据的时候,数据库返回数据的顺序,与我们取前15个数据时,数据库返回数据的顺序是完全不同的,于是他生成的limit
伪列编号就完全不一样,就导致了这样的错误。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。