【问题标题】:rookie MySql question about paging; Is one query enough?菜鸟MySql关于分页的问题;一个查询就够了吗?
【发布时间】:2023-03-31 21:50:02
【问题描述】:

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

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; } 如果($p + 10 > $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 是,我必须进行两次查询吗?

【问题讨论】:

    标签: php sql mysql pagination


    【解决方案1】:

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

    SELECT  SQL_CALC_FOUND_ROWS *
    FROM    t_source
    LIMIT   100, 10;
    
    SELECT  FOUND_ROWS();
    

    第一个将返回结果,第二个将显示返回的记录数没有@987654322 @ 子句。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 那我应该如何使用 COUNT 呢?计数(mt.*、fordon.* 等)来自?
      【解决方案3】:

      SQL_CALC_FOUND_ROWS 查询的替代方法是选择 COUNT(*) 的查询。 This article 建议如果有适当的索引,它甚至可能会更快:

      SELECT COUNT(*) FROM your_table WHERE ...
      

      【讨论】:

        猜你喜欢
        • 2023-04-09
        • 2011-10-24
        • 2011-04-25
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多