鉴于任何查询(分组,联接和子查询都可以任何组合),我想尽可能高效地将其分页。现在我只需运行查询,然后计算返回到PHP的行数,找出有多少页数据,显示当前页面上的数据,并将正确的链接输出到其他页面。以编程方式替换SQL查询中的SELECT字段以确定结果的数量
但是,似乎我认为查询中潜在的非常大的结果集大部分都浪费了。有没有办法在第一次选择COUNT(*)的时候运行查询,以获得一个包含待分页行的单个数字,并且第二次根据当前正在查看的页面使用适当限制运行原始查询?这会对数据库服务器征税吗?
对于一个简单的查询,这是没有问题的......在SELECT和WHERE之前用count(*)替换所有的东西。但是,如果查询中存在分组,则这不起作用,因为您将在每个组中获得计数,而不是总行数。如果你在列a,b和c上分组,选择count(distinct a,b,c)是否正确?有什么特别的事情需要处理子查询吗?
我明白,但是你必须以某种方式获得匹配记录的总数,以建立适当的分页。 – 2009-07-15 13:45:45
没错,我的答案中没有涉及这部分内容。这只是一个起点。 – 2009-07-15 13:48:02