2016-10-17 2 views
1

Я создаю PHP-поиск с помощью mysql.Результаты поиска PHP pagination

Но я столкнулся с этой проблемой : У меня очень длинный и тяжелый (на сервере mysql) запрос для поиска.

Для разбиваться результаты I требуют следующие данные:

  • Пересчет всех результатов (не ограничиваясь ими, так что я знаю, сколько mumbers показать)

    SELECT COUNT(*) as count FROM table WHERE col="val" 
    
  • Limited результаты - Я покажу их этим пользователям

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

Как избежать 2 отдельных запросов для 2 требований, упомянутых выше?

Примечание: Для того, чтобы избежать "? Как тяжело может быть ваш запрос", это мое реальное где условие:

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 

ответ

0

Использование SQL_CALC_FOUND_ROWS

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