Задать вопрос
@kamisarlapsha

Как совместить выборку значений и Count()?

Привет! У меня есть такой запрос:
SELECT COUNT(DISTINCT p.product_id) AS total FROM product_to_category p2c LEFT JOIN product p ON (p2c.product_id = p.product_id)  WHERE p2c.category_id = '66'

Мне нужно посчитать кол-во записей и получить все подходящие product_id, возможно ли это реализовать одним запросом ? Или нужно делать такой же, только без count ? Если в начале добавляю выборку product_id, то приходит только один id.

Заранее спасибо!
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 2
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
SELECT SQL_CALC_FOUND_ROWS p.product_id
FROM product_to_category p2c 
LEFT JOIN product p ON (p2c.product_id = p.product_id)  
WHERE p2c.category_id = '66'

Вернет product_ids.
Дополнительным запросом
SELECT FOUND_ROWS()
Можно получить количество строк. Запрос будет быстрым, так что таких 2 запроса это не то же самое, что 2 запроса с джоинами. Впрочем, первый запрос с SQL_CALC_FOUND_ROWS может быть медленнее чем 2 запроса - все зависит от конкретной структуры данных, индексов.

ЗЫ: Запрос по памяти писал, подходящих данных для тестирования нет, поэтому может придется покрутить.
ЗЗЫ: А вообще на тему SQL_CALC_FOUND_ROWS холивары годами идут. По производительности есть вопросы и много "если". Да и MySQL вроде как его потихоньку депрекейтит. Впрочем, так или иначе - это инструмент. Сами решайте, имеет ли смысл использовать его в вашем конкретном случае.
Ответ написан
Комментировать
Gomonov
@Gomonov
Через UNION возможно, но мне кажется это не лучший вариант. Лучше два запроса или один по выборке id, а потом посмотреть размер выборки
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы