关于分页的菜鸟MySql问题;一个查询足够吗?

时间:2010-05-06 14:48:29

标签: php sql mysql pagination

我几乎已经设法让分页工作了。 我想向用户显示找到的记录总数和当前显示的记录。例如:

4000 found, displaying 0-100.

我用nr 2测试这个(因为我没有那么多记录,有20个)。 所以我使用LIMIT $start, $nr_results;

我是否必须进行两次查询才能按照我想要的方式显示结果,一次查询获取所有记录,然后使mysql_num_rows获取所有记录,然后使用LIMIT进行记录?

我有这个:

 mysql_num_rows($qry_result);
 $total_pages = ceil($num_total / $res_per_page); //$res_per_page==2 and $num_total = 2
    if ($p - 10 < 1) {
       $pagemin=1;
    }

其他{            $ pagemin = $ p - 10;         }  if($ p + 10&gt; $ total_pages){            $ pagemax = $ total_pages;         }  其他{            $ pagemax = $ p + 10;         }

以下是查询:

SELECT
  mt.*, 
  fordon.*, 
  boende.*, 
  elektronik.*, 
  business.*, 
  hem_inredning.*, 
  hobby.* 
FROM classified mt 
 LEFT JOIN fordon ON fordon.classified_id = mt.classified_id 
 LEFT JOIN boende ON boende.classified_id = mt.classified_id 
 LEFT JOIN elektronik ON elektronik.classified_id = mt.classified_id 
 LEFT JOIN business ON business.classified_id = mt.classified_id 
 LEFT JOIN hem_inredning ON hem_inredning.classified_id = mt.classified_id 
 LEFT JOIN hobby ON hobby.classified_id = mt.classified_id 
 ORDER BY modify_date DESC 
 LIMIT 0, 2

谢谢,如果您需要更多输入,请告诉我。

基本上Q是,我是否必须进行两次查询?

3 个答案:

答案 0 :(得分:1)

您可以使用以下两个查询:

SELECT  SQL_CALC_FOUND_ROWS *
FROM    t_source
LIMIT   100, 10;

SELECT  FOUND_ROWS();

第一个将返回结果, second 将显示返回的记录数量没有{{ 1}}子句。

答案 1 :(得分:0)

是的,要获得找到的记录总数,您需要另一个查询 虽然你目前获得总数的方法是不可接受的 您可以使用select count(*) ...查询或SQL_CALC_FOUND_ROWS/FOUND_ROWS()  特征

答案 2 :(得分:0)

SQL_CALC_FOUND_ROWS查询的替代方法是选择COUNT(*)的查询。 This article表明,当适当的索引可用时,它甚至可能更快:

SELECT COUNT(*) FROM your_table WHERE ...