使用限制的mySQL分页检索重复行

时间:2011-11-01 19:25:29

标签: mysql pagination limit

我有一个包含116,000行的表,我想检索所有这些行,但使用以下3个单独的查询:

  1. “SELECT * FROM table LIMIT 0,50000”
  2. “SELECT * FROM table LIMIT 1,50000”
  3. “SELECT * FROM table LIMIT 2,50000”
  4. 我试过这个,但是所有的查询都会返回50,000行的结果,即使“LIMIT是10,50000”,结果也不是我想要的。我只期望第三次查询有16,000行。

    我怎样才能做到这一点?我对LIMIT分页的期望是错误的吗?

5 个答案:

答案 0 :(得分:5)

您对LIMIT如何运作的期望是错误的。第一个参数是第一个要获取的记录,第二个参数是要获取的记录数。

例如,如果一个查询有800个结果而您使用LIMIT 100, 300,那么您将获得第100行到第400行,共计300行。

转到http://dev.mysql.com/doc/refman/5.0/en/select.html并搜索“LIMIT子句”以了解有关LIMIT如何工作的更多信息。

答案 1 :(得分:1)

LIMIT的第一个参数是起始记录号,而不是起始页码。在这种情况下,您的限制应该是:

  1. “SELECT * FROM table LIMIT 0,50000”#50,000记录从第0条记录开始
  2. “SELECT * FROM table LIMIT 50000,50000”#50,000条记录从第50000条记录开始
  3. “SELECT * FROM table LIMIT 100000,50000”#50,000记录从第100000条记录开始

答案 2 :(得分:1)

这是LIMIT offset, rowcount。您的第一个查询从第0行开始获取50,000行。第二个查询从第2行开始获取50,000行。换句话说,您将获取49,999个相同的行,然后获取一个不同的行。

如果你想将116,000行分成3个相等的部分,你必须这样做

SELECT ... LIMIT 0, 38666
SELECT ... LIMIT 38667, 38666
SELECT ... LIMIT 77333, 38668

答案 3 :(得分:1)

Limit子句带有一个或两个参数:

第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。初始行的偏移量为0(不是1)。

所以你可以这样做:

select * from table limit 0,50000;
select * from table limit 50001,50000;
select * from table limit 100001,50000;

看看这个link

答案 4 :(得分:0)

是的,你理解是错的。你应该做

SELECT * FROM table LIMIT 100000, 50000

。语法是

SELECT [..] LIMIT <count>

SELECT [..] LIMIT <offset>, <count>

。而一切都与SELECTed的行数相关。