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 :: Запрос количества без лимита и с лимитом в одном запросе возможно ли?
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
Добрый день всем
Запрос формируется у меня в методе и сам код ну скажем так очень большой так как в нем участвует неизвестное количество параметров. Это вывод товаров, в зависимости от выбранного количества товаров на странице устанавливается лимит, но при этом мне нужно еще разбить на страницы то есть получить всего страниц при заданных условиях возможно как то получить количество страниц при заданных условиях и товары с лимитом или для количества страниц придется повторить данный запрос?
Tyoma5891
Отправлено: 14 Февраля, 2014 - 10:59:11
Частый посетитель
Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013
Помог: 5 раз(а)
3d_killer пишет:
Добрый день всем
Запрос формируется у меня в методе и сам код ну скажем так очень большой так как в нем участвует неизвестное количество параметров. Это вывод товаров, в зависимости от выбранного количества товаров на странице устанавливается лимит, но при этом мне нужно еще разбить на страницы то есть получить всего страниц при заданных условиях возможно как то получить количество страниц при заданных условиях и товары с лимитом или для количества страниц придется повторить данный запрос?
Посмотрите в сторону SELECT FOUND_ROWS()...
retvizan
Отправлено: 14 Февраля, 2014 - 16:46:55
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2013
Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013
Помог: 5 раз(а)
retvizan пишет:
Tyoma5891 пишет:
Посмотрите в сторону SELECT FOUND_ROWS()...
В эту сторону нужно смотреть с очень большой осторожностью.
http://sqlinfo.ru/forum/viewtopic.php?id=6876
ну так надо оптимизировать запросы естественно, килограмовые запросы и будут тяжело обрабатываться, а SELECT FOUND_ROWS() призван как раз для оптимизации сам по себе уже..
retvizan
Отправлено: 14 Февраля, 2014 - 17:18:43
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2013
Помог: 0 раз(а)
Tyoma5891 пишет:
а SELECT FOUND_ROWS() призван как раз для оптимизации сам по себе уже..
Ссылка как раз о том, что это заблуждение.
Именно его использование зачастую и ставит крест на возможности оптимизации запроса.
anakoman
Отправлено: 14 Февраля, 2014 - 18:13:55
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Май 2013
Помог: 1 раз(а)
В зависимости от того, что выберет пользователь будет строиться WHERE на выбор данных из БД. Следовательно, чтобы разбить результат выбора на страницы используем ПАГИНАЦИЮ (метод Paganation).
Если в гугле много про это и также о параметрах этого метода.
----- Иногда, пока не спросишь - сам не поймешь
DelphinPRO
Отправлено: 14 Февраля, 2014 - 19:06:51
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
LEFTJOIN table_product_property_value AS param_3 ON
param_3.id_product=temp.id
LEFTJOIN table_photo_product ON
table_photo_product.id_articul=table_product.id
WHERE
temp.category_id IN(?,?,?)AND
temp.visible=1 AND
table_product.new=? AND
table_product.brend=? AND
temp.color=? AND
table_product.price > ? AND
table_product.price < ? AND
param_3.id_param=? AND
param_3.value=?
GROUPBY table_product.id
ORDERBY table_product.date DESC
LIMIT ?,?
я бы послал бы если бы на месте мускуля за такой запрос
3d_killer
Отправлено: 15 Февраля, 2014 - 09:20:02
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
это еще почему?
Мелкий
Отправлено: 15 Февраля, 2014 - 09:35:06
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Tyoma5891, почему? Вполне рядовой запросец. Поменять только left join на join там, где первый не нужен.
retvizan пишет:
Именно его использование зачастую и ставит крест на возможности оптимизации запроса.
Запроса - да. Не получится по limit'у усечь объём работы сортировки.
Рабочий процесс - не всегда. Если есть возможность посчитать count более быстрым способом, чем прогонять тот же самый запрос - надо использовать его (на оптимизатор лучше не полагаться, он умный, но тупой). Но в сравнении "сделать один запрос с limit, а потом ещё раз, но с count", SQL_CALC_FOUND_ROWS может оказаться дешевле. На развесистом запросе, возвращающем не так много записей - он почти наверняка окажется дешевле.
----- PostgreSQL DBA
3d_killer
Отправлено: 15 Февраля, 2014 - 10:14:23
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
Мелкий спасибо (Добавление)
Мелкий пишет:
Поменять только left join на join там, где первый не нужен.
единственное этого не понял, не могли бы пояснить.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.