我正在使用jquery和DataTables插件构建一个php站点。我的页面布局正如它需要与分页工作一样,但在处理大型数据集时,我注意到服务器正在拉动所有返回的行,而不是每个“页面”中的10行(可能更多)限制。
是否可以限制查询结果并在内存中保留这些结果的ID号,以便在点击第2页(或更改结果编号)时,只搜索新数据?
这样做是否有意义?
我只是不想查询返回2000行的数据库然后有一个'前端插件'让它看起来像其他结果在开始时真实地在页面上被隐藏了。
答案 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是首选,因为它不会为每个页面加载添加额外的查询。