Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запрос количества без лимита и с лимитом в одном запросе возможно ли?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Запрос количества без лимита и с лимитом в одном запросе возможно ли?
3d_killer
Отправлено: 14 Февраля, 2014 - 10:25:00
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




Добрый день всем
Запрос формируется у меня в методе и сам код ну скажем так очень большой так как в нем участвует неизвестное количество параметров. Это вывод товаров, в зависимости от выбранного количества товаров на странице устанавливается лимит, но при этом мне нужно еще разбить на страницы то есть получить всего страниц при заданных условиях возможно как то получить количество страниц при заданных условиях и товары с лимитом или для количества страниц придется повторить данный запрос?
 
My status
 Top
Tyoma5891
Отправлено: 14 Февраля, 2014 - 10:59:11
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




3d_killer пишет:
Добрый день всем
Запрос формируется у меня в методе и сам код ну скажем так очень большой так как в нем участвует неизвестное количество параметров. Это вывод товаров, в зависимости от выбранного количества товаров на странице устанавливается лимит, но при этом мне нужно еще разбить на страницы то есть получить всего страниц при заданных условиях возможно как то получить количество страниц при заданных условиях и товары с лимитом или для количества страниц придется повторить данный запрос?


Посмотрите в сторону SELECT FOUND_ROWS()...
 
 Top
retvizan
Отправлено: 14 Февраля, 2014 - 16:46:55
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Tyoma5891 пишет:
Посмотрите в сторону SELECT FOUND_ROWS()...

В эту сторону нужно смотреть с очень большой осторожностью.
http://sqlinfo[dot]ru/forum/viewtopic.php?id=6876
 
 Top
Tyoma5891
Отправлено: 14 Февраля, 2014 - 16:54:09
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




retvizan пишет:
Tyoma5891 пишет:
Посмотрите в сторону SELECT FOUND_ROWS()...

В эту сторону нужно смотреть с очень большой осторожностью.
http://sqlinfo.ru/forum/viewtopic.php?id=6876

ну так надо оптимизировать запросы естественно, килограмовые запросы и будут тяжело обрабатываться, а SELECT FOUND_ROWS() призван как раз для оптимизации сам по себе уже..
 
 Top
retvizan
Отправлено: 14 Февраля, 2014 - 17:18:43
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Tyoma5891 пишет:
а SELECT FOUND_ROWS() призван как раз для оптимизации сам по себе уже..
Ссылка как раз о том, что это заблуждение.

Именно его использование зачастую и ставит крест на возможности оптимизации запроса.
 
 Top
anakoman
Отправлено: 14 Февраля, 2014 - 18:13:55
Post Id


Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013  


Помог: 1 раз(а)




В зависимости от того, что выберет пользователь будет строиться WHERE на выбор данных из БД. Следовательно, чтобы разбить результат выбора на страницы используем ПАГИНАЦИЮ (метод Paganation).
Если в гугле много про это и также о параметрах этого метода.


-----
Иногда, пока не спросишь - сам не поймешь
 
 Top
DelphinPRO
Отправлено: 14 Февраля, 2014 - 19:06:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Господа, уймитесь Улыбка

вопрос был в том, можно ли объединить два запроса

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM table1 WHERE ... LIMIT 1 10
и
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT COUNT(*) FROM table1 WHERE ...


в один запрос.

(Отредактировано автором: 14 Февраля, 2014 - 19:08:49)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
anakoman
Отправлено: 14 Февраля, 2014 - 19:23:41
Post Id


Гость


Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013  


Помог: 1 раз(а)




Автора в студию


-----
Иногда, пока не спросишь - сам не поймешь
 
 Top
Invert
Отправлено: 15 Февраля, 2014 - 04:56:42
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


Помог: 5 раз(а)




3d_killer пишет:
придется повторить данный запрос?

Да, COUNT( id ) вторым запросом
 
 Top
3d_killer
Отправлено: 15 Февраля, 2014 - 08:31:16
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




Invert жаль, это простая комбинация запроса:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT
  3. table_product.model,
  4. table_photo_product.photo_product3
  5.  
  6. FROM table_product
  7.  
  8. LEFT JOIN
  9. table_product AS temp ON
  10. table_product.id=temp.parent
  11.  
  12. LEFT JOIN table_product_property_value AS param_3 ON
  13. param_3.id_product=temp.id
  14.  
  15. LEFT JOIN table_photo_product ON
  16. table_photo_product.id_articul=table_product.id
  17.  
  18. WHERE
  19. temp.category_id IN (?,?,?) AND
  20. temp.visible=1 AND
  21. table_product.new=? AND
  22. table_product.brend=? AND
  23. temp.color=? AND
  24. table_product.price > ? AND
  25. table_product.price < ? AND
  26. param_3.id_param=? AND
  27. param_3.value=?
  28.  
  29. GROUP BY table_product.id
  30. ORDER BY table_product.date DESC
  31. LIMIT ?,?
  32.  
 
My status
 Top
Tyoma5891
Отправлено: 15 Февраля, 2014 - 09:07:06
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




3d_killer пишет:
Invert жаль, это простая комбинация запроса:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT
  3. table_product.model,
  4. table_photo_product.photo_product3
  5.  
  6. FROM table_product
  7.  
  8. LEFT JOIN
  9. table_product AS temp ON
  10. table_product.id=temp.parent
  11.  
  12. LEFT JOIN table_product_property_value AS param_3 ON
  13. param_3.id_product=temp.id
  14.  
  15. LEFT JOIN table_photo_product ON
  16. table_photo_product.id_articul=table_product.id
  17.  
  18. WHERE
  19. temp.category_id IN (?,?,?) AND
  20. temp.visible=1 AND
  21. table_product.new=? AND
  22. table_product.brend=? AND
  23. temp.color=? AND
  24. table_product.price > ? AND
  25. table_product.price < ? AND
  26. param_3.id_param=? AND
  27. param_3.value=?
  28.  
  29. GROUP BY table_product.id
  30. ORDER BY table_product.date DESC
  31. LIMIT ?,?
  32.  

я бы послал бы если бы на месте мускуля за такой запрос Не понял
 
 Top
3d_killer
Отправлено: 15 Февраля, 2014 - 09:20:02
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




это еще почему?
 
My status
 Top
Мелкий Супермодератор
Отправлено: 15 Февраля, 2014 - 09:35:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Tyoma5891, почему? Вполне рядовой запросец. Поменять только left join на join там, где первый не нужен.

retvizan пишет:
Именно его использование зачастую и ставит крест на возможности оптимизации запроса.

Запроса - да. Не получится по limit'у усечь объём работы сортировки.
Рабочий процесс - не всегда. Если есть возможность посчитать count более быстрым способом, чем прогонять тот же самый запрос - надо использовать его (на оптимизатор лучше не полагаться, он умный, но тупой). Но в сравнении "сделать один запрос с limit, а потом ещё раз, но с count", SQL_CALC_FOUND_ROWS может оказаться дешевле. На развесистом запросе, возвращающем не так много записей - он почти наверняка окажется дешевле.


-----
PostgreSQL DBA
 
 Top
3d_killer
Отправлено: 15 Февраля, 2014 - 10:14:23
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




Мелкий спасибо
(Добавление)
Мелкий пишет:
Поменять только left join на join там, где первый не нужен.
единственное этого не понял, не могли бы пояснить.

руководствовался этим http://4[dot]bp[dot]blogspot[dot]com/-mj4KbB[dot][dot][dot]L_JOINS_orig[dot]jpg
 
My status
 Top
Мелкий Супермодератор
Отправлено: 15 Февраля, 2014 - 10:32:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




3d_killer пишет:
единственное этого не понял, не могли бы пояснить.

Ну, например:
Tyoma5891 пишет:
LEFT JOIN table_product AS temp

Tyoma5891 пишет:
WHERE temp.category_id IN (?,?,?) AND temp.visible=1 AND

Поля таблицы по условию не могут быть null. Значит, left join здесь неуместен.


-----
PostgreSQL DBA
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB