可以限制返回的结果,但是将“分页”留给表吗?

时间:2010-11-16 00:18:57

标签: php jquery mysql datatables

我正在使用jquery和DataTables插件构建一个php站点。我的页面布局正如它需要与分页工作一样,但在处理大型数据集时,我注意到服务器正在拉动所有返回的行,而不是每个“页面”中的10行(可能更多)限制。

是否可以限制查询结果并在内存中保留这些结果的ID号,以便在点击第2页(或更改结果编号)时,只搜索新数据?

这样做是否有意义?

我只是不想查询返回2000行的数据库然后有一个'前端插件'让它看起来像其他结果在开始时真实地在页面上被隐藏了。

1 个答案:

答案 0 :(得分:1)

SQL中的LIMIT子句有两部分 - 限制和偏移。

获取前10行:

SELECT ... LIMIT 0,10

获得接下来的10行:

SELECT ... LIMIT 10,10

获得接下来的10行:

SELECT ... LIMIT 20,10

只要您每次对结果集进行ORDER,您绝对不必(并且不希望)首先要求数据库向您发送所有2000行。

要显示与此配合的分页,您仍需要知道总共有多少行符合您的查询。有两种方法可以解决这个问题 -

1)使用单独的查询要求行计数

SELECT COUNT(*) FROM table WHERE ...

2)在查询中使用SQL_CALC_FOUND_ROWS提示,这将告诉MySQL在返回您要求的10之前计算与查询匹配的行数。然后,您发出SELECT FOUND_ROWS()查询以获取该结果。

SELECT SQL_CALC_FOUND_ROWS column1, column2 ... LIMIT 0,10

2是首选,因为它不会为每个页面加载添加额外的查询。