假设我检索了我的数据列表......
第一
$Query = mysql_query("SELECT * FROM data ORDER BY name ASC LIMIT 0,30");
从那里我使用AJAX / jQuery来追加另外30条记录。我需要调用另一个文件,其中查询将从我离开的地方开始。
第二
$Query = mysql_query("SELECT * FROM data WHERE name < '".mysql_real_escape_string($_GET['lastRecord'])."' ORDER BY name ASC LIMIT 0,30");
我的问题是,如果我有第一个查询订单的第一个30名称,我怎么能写第二个查询来提取我按顺序中断的地方?
答案 0 :(得分:2)
像这样更改LIMIT - LIMIT 30,30
BTW,你把它标记为jQuery而不是。
答案 1 :(得分:1)
此选项适用于短表,但在长表中,这会导致性能不佳
您执行的每个查询(如此)将使用filesort
执行全表扫描,这需要一些时间。
我认为你需要阅读一次表,并将结果放在一个临时表(已经排序)中,并使用index
列,然后使用WHERE index BETWEEN $number AND ($number+30)
。
答案 2 :(得分:0)
您不需要在查询中添加WHERE子句,只需使用LIMIT来分割出您想要的结果块。限制用于将MySQL查询结果限制在指定范围内。您可以使用它来显示前X个结果数,或显示X - Y结果的范围。语法为Limit X, Y
,其中X是起点,Y是要检索的记录数。
例如:
$Query = mysql_query("SELECT * FROM data ORDER BY name ASC LIMIT 90,30");
将从91st开始检索30条记录(记录为零索引)。
答案 3 :(得分:0)
LIMIT子句中的第一个数字是偏移量,从0开始。因此,您的第一个查询正确LIMIT 0, 30
以获得前30个。
只需将偏移量增加30
即可从记录31
开始,所以再多做30次LIMIT 30, 30
。
对于第三页,它将是LIMIT 60, 30
等。
如果您需要page x of n
类型显示,请先发出COUNT(*)
以获取总行数,但要了解如果在两者之间插入或删除行,实际的行数和行数可能会发生变化调用