Логика И+ИЛИ

#
Логика И+ИЛИ
у товаров есть 4 доп. свойства
подскажите, как вывести товары у которых единице равно первое свойство и одно из оставшихся 3

такая логика
1 И (2 ИЛИ 3 ИЛИ 4)

какие тут суффиксы и префиксы получаются
#
Re: Логика И+ИЛИ
h4mpy писал(а):
такая логика 1 И (2 ИЛИ 3 ИЛИ 4)
- такую логику организовать, к сожалению, не получится. Т.к. логическое И реализуется через ИЛИ(и предложения GROUP BY и HAVING), то в итоге в выборку будут попадать товары, у которых установлены свойства 2 или 3, 2 или 4, 3 или 4. Т.е. свойство 1 вообще не будет учитываться. Если же у вас не может быть таких товаров, у которых одновременно будут установлены два(или более) из свойств 2, 3, 4, то реализация возможна.
#
Re: Логика И+ИЛИ
а если 1 не будет, можно такое реализовать?

то есть просто (2 ИЛИ 3 ИЛИ 4)
при этом у товаров могут быть установлены несколько из этих свойств

пример задачи - база ком. недвижимости, 1 объект может использоваться под разное назначение
и в фильтр должны попадать объекты хотя бы с одной из поставленных галочек
#
Re: Логика И+ИЛИ
решил так, похоже работает
$count_condition = 0;
$count_properties = 0;

$element['type'] = 0;
$element['prefix'] = ' AND (';
$element['name'] = '';
$element['if'] = '';
$element['value'] = '';
$element['sufix'] = ' ';

$params['select'][] = $element;

if ($_REQUEST['property1']==1 || $_REQUEST['property2']==1 || $_REQUEST['property3']==1) {

if ($_REQUEST['property1']==1) {
   $element['type'] = 1;
   $element['property_id'] = 336;
   if ($count_properties) {$element['prefix'] = ' OR ';} else {$element['prefix'] = ' ';}
   $element['if'] = '=';
   $element['value'] = '1';
   $element['sufix'] = '';
   $params['select'][] = $element;
   $count_properties++;
}
if ($_REQUEST['property2']==1) {
   $element['type'] = 1;
   $element['property_id'] = 335;
   if ($count_properties) {$element['prefix'] = ' OR ';} else {$element['prefix'] = ' ';}
   $element['if'] = '=';
   $element['value'] = '1';
   $element['sufix'] = '';
   $params['select'][] = $element;
   $count_properties++;
}
if ($_REQUEST['property3']==1) {
   $element['type'] = 1;
   $element['property_id'] = 334;
   if ($count_properties) {$element['prefix'] = ' OR ';} else {$element['prefix'] = ' ';}
   $element['if'] = '=';
   $element['value'] = '1';
   $element['sufix'] = '';
   $params['select'][] = $element;
   $count_properties++;
}
$count_condition++;
}

if (!$count_condition) {$element['prefix'] = ' 1';} else {$element['prefix'] = '';}
$element['type'] = 0;
$element['name'] = '';
$element['if'] = '';
$element['value'] = '';

if ($count_condition != 0) {
$params['sql_group_by'] = 'GROUP BY shop_items_catalog_table.shop_items_catalog_item_id';
$params['sql_having'] = "HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = {$count_condition}";
}
else {
$params['sql_having'] = 'HAVING 1 ';
}

$element['sufix'] = ' ) ';
$params['select'][] = $element;
Авторизация