【发布时间】:2014-04-23 01:35:00
【问题描述】:
通过克隆 id=12 插入行 id=18 后,我有一个包含 6 行数据的表,id=11,12,13,14,15,18。我按列 (c1) 从表中选择数据,碰巧这 6 行都具有相同的列值。我尝试使用 select limit 循环遍历 c1=2; 的所有行。
SELECT id FROM table WHERE c1=2 LIMIT 0,2 ;
-> 我得到了 15,14
SELECT id FROM table WHERE c1=2 LIMIT 2,2 ;
-> 我得到了 13,11
SELECT id FROM table WHERE c1=2 LIMIT 4,2 ;
-> 我得到了 15、18
id=12怎么不见了,id=15又出现了两次?
我错过了什么吗?插入新行后,我应该重新使用表格还是做点什么?
在下面添加:
事情恰好比仅仅添加 ORDER BY 更复杂。所有 6 行都具有相同的 c1 列值。如果我使用“ORDER BY c1 DESC”,那么我会得到同样不想要的结果。然而,这 6 行在 c2 列上有不同的值。当我使用“ORDER BY c2 DESC”时,我可以正确循环所有 6 行数据。现在来了另一个问题 - 为什么当所有行都具有相同的 yy 列值时,mysql 不 ORDER 并正确返回 SELECT ** ORDER by yy DESC LIMIT 2, 2。
当然,我们知道所有行的 ID 都会不同,但我们不知道表中的所有行在哪里会有不同的 c1 值(在 ORDER BY 中使用)。如果我们确实需要 ORDER BY C1 怎么办?
【问题讨论】:
-
你需要
ORDER BY一些东西,否则限制没有意义。 -
这些是您的数据 11,12,13,14,15,18 。你需要什么?
-
你可以阅读一些基本的 SQL 教程;这将比等待关于 SO 的答案花费更少的时间。最好的事情是 - 如果您阅读教程并尝试几件事,您的问题会变得更好(并且会更少)。
-
主查询并不总是以相同的顺序返回结果。使用
ORDER BY id再次测试。 -
事情恰好比仅仅添加 ORDER BY 更复杂。所有 6 行都具有相同的 c1 列值。如果我使用“ORDER BY c1 DESC”,那么我会得到同样不想要的结果。然而,这 6 行在 c2 列上有不同的值。当我使用“ORDER BY c2 DESC”时,我可以正确循环所有 6 行数据。现在出现另一个问题 - 为什么当所有行都具有相同的 yy 列值时,mysql 不 ORDER 并正确返回 SELECT **** ORDER by yy DESC LIMIT 2, 2。
标签: mysql pagination limit