Vladislav
а хевинг вернет 3
Vladislav
Так?
The Ant
хевинг ничего не веренет ) Он условие
The Ant
чтобы сравнить количество записей, тебе их нужно получить для начала
The Ant
это количество
Vladislav
хевинг ничего не веренет ) Он условие
хевинг нужно с count писать чтобы количество сравнивать?
The Ant
не обязательно с каунтом, есть и другие функции, но да.
Vladislav
И еще, having работает в контексте группы?
The Ant
наскоко помню да, ознакомься с маном. я могу пиздеть по памяти )
Vladislav
наскоко помню да, ознакомься с маном. я могу пиздеть по памяти )
что-то не так( 5 записей. 2 из них с одинаковым именем и id но разными parent_type_filter
Vladislav
having count(parent_type_filter)=2
Vladislav
и я теряю эту запись
Vladislav
->groupBy('products.id')
Vladislav
Группирую по id
The Ant
все верно
The Ant
иды же одинаковые, они и сгруппировались
Vladislav
иды же одинаковые, они и сгруппировались
значит having не в контексте группы работает(
Vladislav
он же не видит что схлопнулось 2
Vladislav
иды же одинаковые, они и сгруппировались
не видно чтобы гдето фигурировало COUNT(parent_type_filter) as parent_type_filter_num // какой нибудь
Vladislav
Проще говоря добится доп поля в который положится число групп фильтров
Vladislav
?
Vladislav
и после группировкми уже having по этому полю
Vladislav
Хотя опять же вопрос, как получить в контексте группы до группировки
Vladislav
просто подставив в селект возвращяет вообще 8
The Ant
и узнал что хавинг работает в контексте группировки
The Ant
смотри по нормальному запросу, а не по той херне, что ты сейчас делаешь
The Ant
по чистому sql
Vladislav
select *,products.name as name, companies.name as company_name,companies.url as url_company, products.url as url, section.url as url_section_company,products.id as id,products.img as img,secProd.url as url_section from products left join catalog_filters on catalog_filters.catalog_id = products.id left join filters on catalog_filters.filter_id = filters.id left join companies on companies.id = products.company_id left join company_section on company_section.company_id = companies.id left join section on section.id = company_section.section_id left join section as secProd on secProd.id = products.place where catalog_filters.filter_id in (2, 12) and filters.parent_type_filter in (1, 4) group by products.id order by products.name asc
Vladislav
5 ctr
Vladislav
сек
Vladislav
удалю лишние джойны
Vladislav
по чистому sql
понятно вот и ответ, после удаления дополнительных join все работает как часы
The Ant
не ответ
The Ant
select *
The Ant
1 ошибка
The Ant
это все ломает
Vladislav
это все ломает
а, но ломает когда я дополнительно джоиню компнию
The Ant
выбирай то что тебе нужно, и явно указывай что выбирать, для начала
Vladislav
сейчас попробую вручную перебрать поля , что мне нужны выкинув *, но тут скорее нужно всем id дать алиас
The Ant
select products.*, companies.*,
The Ant
типо того, тока не звездочками, а что нужно
Vladislav
выбирай то что тебе нужно, и явно указывай что выбирать, для начала
спасибо, за потреченное время, думаю в первую очередь нужно дать id элиасы
The Ant
далее, не виден хевинг
Vladislav
далее, не виден хевинг
having count(parent_type_filter)=2
Vladislav
сейчас он точно есть не понимаю как он прошлый раз потерялся
The Ant
parent_type_filter откуда он берется?
The Ant
filters.parent_type_filter
Vladislav
parent_type_filter откуда он берется?
Catalog::leftJoin('catalog_filters', 'catalog_filters.catalog_id', 'products.id') ->leftJoin('filters', 'catalog_filters.filter_id', 'filters.id')
Vladislav
Да
The Ant
так и указывай
The Ant
типа: select products.id, products.name, companies.id, companies.name, COUNT(filters.parent_type_filter) as filters_num, ... group by products.id having filters_num = 2 order by products.name asc
The Ant
в целом запрос говно. сломается на дефолтном конфиге 5.7 мускула
Vladislav
пока тестирую проблем нет, пока не начинаешь join ить дополнительные таблицы
Vladislav
select *,products.name as name from products left join catalog_filters on catalog_filters.catalog_id = products.id left join filters on catalog_filters.filter_id = filters.id where products.place in (34, 35, 36, 39, 38, 37) and catalog_filters.filter_id in (2, 12) and filters.parent_type_filter in (1, 4) group by products.id having count(filters.parent_type_filter)=2 order by products.name asc
Vladislav
select * тоже не ломает ничего, но потом наверное исправлю
The Ant
ломает
The Ant
просто мускул тебе прощает
Vladislav
единственное нужно unique добавить
The Ant
сам подумай. как он будет группировать, если у тебя там уникальных значений вагон?
The Ant
не просто вагон, дохуя и больше
The Ant
с каждой таблицы вылезают все значения в строку, и это формирует уникальность строки
Vladislav
с каждой таблицы вылезают все значения в строку, и это формирует уникальность строки
проще говоря выше вы ругаетесь не на логику, а на то что как минимум у каждой твблицы есть id и нужно вводить алиасы?
The Ant
нет
The Ant
логика у тебя не правильная
The Ant
смотри
The Ant
ты выбираешь продукты, как основную таблицу, и джойнишь к ней допустим компании
The Ant
не знаю как там у тебя устроено, просто предполагаю
The Ant
у 1 продукта 2 компании поставщика, или производителя (носки черные, ооо рога и носки черные, ооо копыта)
The Ant
просто пример, абстрактный.
The Ant
вот. ты выбираешь эти две таблицы
The Ant
1 | носки черные | рога 1 | носки черные | копыта
The Ant
1 это ид товара
The Ant
второй название товара