Есть таблицы
products [id, name,publish, ....]
category [id, name, parent_id...]
products_to_category [product_id, category_id]
При расчете количества товаров у главной категории выводятся дубли, допустим если один товар в подкатегориях BMW, AUDI, OPEL, (главная категории у всех автозапчасти) то будет считаться 3 товара у категории Автозапчасти
выборка делается так:
Отрывок из ProductsSearch.php метод search
$query = Products::find();
....
$query->joinWith('categories');
$query->andFilterWhere(['category.parent_id' => $this->mainCategoryID]);
relation в Products.php
public function getCategories() {
return $this->hasMany(Category::className(), ['id' => 'category_id'])
->viaTable('products_to_category', ['product_id' => 'id']);
}
relation в Category.php
public function getParent()
{
return $this->hasOne(Category::className(), ['id' => 'parent_id']);
}
вот вывод запроса
SELECT COUNT(*) FROM `products` LEFT JOIN `products_to_category` ON `products`.`id` = `products_to_category`.`product_id` LEFT JOIN `category` ON `products_to_category`.`category_id` = `category`.`id` WHERE (`category`.`parent_id`=1) AND (`publish`=1)
p.s в ListView выводится один товар, то есть без дублей, но в summary пишет, что найдено 3 товара
p.p.s Есть ли способ обойти group by в таких случаях? так как при больших объемах базы с ним будет долго выполняться запросы от 30-40 секунд до 200 при нагрузках