我有一个包含116,000行的表,我想检索所有这些行,但使用以下3个单独的查询:
我试过这个,但是所有的查询都会返回50,000行的结果,即使“LIMIT是10,50000”,结果也不是我想要的。我只期望第三次查询有16,000行。
我怎样才能做到这一点?我对LIMIT分页的期望是错误的吗?
答案 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的第一个参数是起始记录号,而不是起始页码。在这种情况下,您的限制应该是:
答案 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的行数相关。