【问题标题】:PHP search results paginationPHP搜索结果分页
【发布时间】:2016-10-17 17:55:17
【问题描述】:

我正在使用 mysql 构建基于 PHP 的搜索。

但我遇到了这个问题: 我有一个很长很重(在 mysql 服务器上)的搜索查询。

对结果进行分页,我需要以下数据:

  • 所有结果的计数(不限制,所以我知道要显示多少个妈妈)

    SELECT COUNT(*) as count FROM table WHERE col="val"
    
  • 有限的结果 - 我向用户展示这些

    SELECT * FROM table WHERE col="val" LIMIT 20, 10
    

如何避免对上述 2 个要求进行 2 个单独的查询?

注意: 为了避免“您的查询有多大?”,这是我真正的 where 条件:

    SELECT *, 
    (1000 * 6371 * acos( cos( radians(42.6051862) ) * cos( radians( project_lat ) ) * cos( radians( project_lng ) - radians(23.037836800000036) ) + sin( radians(42.6051862) ) * sin( radians( project_lat ) ) ) ) AS distance
    FROM `projects` 

    JOIN `subcategories` ON `projects`.`subcat_id` = `subcategories`.`subcat_id` 
    JOIN `categories` ON `subcategories`.`cat_id` = `categories`.`cat_id`
    JOIN `project_images` ON `projects`.`project_id` = `project_images`.`project_id` 

    WHERE `projects`.`subcat_id` = 618 
    AND `project_start` < '2016-10-30' 
    AND `project_start` > '2016-10-14' 
    AND `project_price` > 123 
    AND `project_price` < 233 
    AND `project_currency` = 'BTN' 
    AND `project_approved` = 1 
    AND MATCH (project_title, project_description) AGAINST ('test') 
    GROUP BY `projects`.`project_id` 
    HAVING `distance` < 7400

【问题讨论】:

    标签: php mysql pagination


    【解决方案1】:

    使用 sql_calc_found_rows

    SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE id > 100 LIMIT 10;
    SELECT FOUND_ROWS();  
    

    【讨论】:

      猜你喜欢
      • 2017-03-25
      • 1970-01-01
      • 2012-07-31
      • 2017-12-13
      • 2014-03-26
      • 2017-02-24
      • 2018-02-17
      • 1970-01-01
      相关资源
      最近更新 更多