【问题标题】:mysql select limit not working properly after insert插入后mysql选择限制无法正常工作
【发布时间】: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


【解决方案1】:

当您需要对数据进行排序时,请始终使用ORDER BY。然后您可以使用LIMIT 过滤数据。

试试这个:-

SELECT ID FROM table WHERE c1=2 ORDER BY ID DESC LIMIT 2,2;

对于LIMIT,您可以根据需要获得任何行位置。这里我取 2,2 表示从第 2 行位置开始,总记录将显示 2。

注意:-

ORDER BY (DESC) - Descending Order
ORDER BY (ASC) - Ascending Oder

Read more here.

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    您需要将 order by 子句添加到您的 sql 查询中,否则没有任何限制。
    使用下面的
    SELECT id FROM table WHERE c1=2 ORDER BY id LIMIT 2,2
    这应该可以满足您的需求。

    【讨论】:

    • 为了记录,没有订单有限制仍然有一点,有一个偏移量没有意义。限制在 OP 之外还有很多用途。
    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 2017-04-07
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多