public function prepareQueryBeforeCount(xPDOQuery $c) { $c = parent::prepareQueryBeforeCount($c); $alias = $c->getAlias(); // Поиск по модели радиатора $radiators_where = array(); if($radiator_model_id = $this->getProperty('radiator_model_id')){ $categories = array(); $this->getCategories($radiator_model_id, $categories); if($categories){ $radiators_where['parent:IN'] = $categories; } unset($categories); } if($radiator_height = (int)$this->getProperty('radiator_height')){ $c->leftJoin('modTemplateVarResource', 'tv_radiator_height', "tv_radiator_height.tmplvarid = 4 AND tv_radiator_height.contentid = {$alias}.id"); $radiators_where[] = "CAST(tv_radiator_height.value as UNSIGNED) <= {$radiator_height}"; } if($radiators_where){ $c->where(array( array( "template" => 5, $radiators_where, ), "OR:template:!=" => 5, )); } return $c; }
SELECT modResource.* FROM `modx_site_content` AS `modResource` JOIN `modx_shopmodx_products` `Product` ON `modResource`.`id` = `Product`.`resource_id` WHERE ( `modResource`.`deleted` = 0 AND `modResource`.`hidemenu` = 0 AND `modResource`.`published` = 1 )
SELECT modResource.* FROM `modx_site_content` AS `modResource` JOIN `modx_shopmodx_products` `Product` ON `modResource`.`id` = `Product`.`resource_id` LEFT JOIN `modx_site_tmplvar_contentvalues` `tv_radiator_height` ON tv_radiator_height.tmplvarid = 4 AND tv_radiator_height.contentid = modResource.id WHERE ( ( `modResource`.`deleted` = 0 AND `modResource`.`hidemenu` = 0 AND `modResource`.`published` = 1 ) AND ( ( `modResource`.`template` = 5 AND CAST(tv_radiator_height.value as UNSIGNED) <= 350 ) OR `modResource`.`template` != 5 ) )
$params = array( "radiator_height" => 650, "radiator_depth" => 200, "radiator_model_id" => [ 1248, 19, ], "where" => [ "template" => 5, ], );
SELECT modResource.* FROM `modx_site_content` AS `modResource` JOIN `modx_shopmodx_products` `Product` ON `modResource`.`id` = `Product`.`resource_id` LEFT JOIN `modx_site_tmplvar_contentvalues` `tv_radiator_height` ON tv_radiator_height.tmplvarid = 4 AND tv_radiator_height.contentid = modResource.id LEFT JOIN `modx_site_tmplvar_contentvalues` `tv_radiator_depth` ON tv_radiator_depth.tmplvarid = 7 AND tv_radiator_depth.contentid = modResource.id WHERE ( ( `modResource`.`deleted` = 0 AND `modResource`.`hidemenu` = 0 AND `modResource`.`published` = 1 ) AND ( ( `modResource`.`template` = 5 AND ( `modResource`.`parent` IN (1248,19,27,230,1249) AND CAST(tv_radiator_height.value as UNSIGNED) <= 650 AND CAST(tv_radiator_depth.value as UNSIGNED) <= 200 ) ) OR `modResource`.`template` != 5 ) )