msProducts - выборка с условием или

Не смог найти решения, перепробовал различные варианты, которые только в голову пришли, но безуспешно, подскажите как правильно написать условие
&where=`{"Data.hit":1, "OR:Data.sale":1, "OR:Data.new":1, "OR:Data.stock":1}`
Максим
13 декабря 2019, 08:49
modx.pro
947
0

Комментарии: 5

Антон Тарасов
13 декабря 2019, 09:37
0
&where=`{"Data.hit":"1", "OR:Data.sale":"1", "OR:Data.new":"1", "OR:Data.stock":"1"}`
А так? Ну и поля sale,new и stock само собой существуют в Data?
А что лог говорит?
    Максим
    13 декабря 2019, 09:44
    0
    Да, поля существую, я их сам создавал, по одному полю отлично выбирает вот по такой конструкции
    &where=`{"Data.hit":1}`
    Ваш вариант также не помог

    Лог:
    <pre class="msProductsLog">0.0000548: pdoTools loaded.
    0.0001402: Conditions prepared
    0.0000181: xPDO query object created
    0.0001390: leftJoined <i>msProductData</i> as <b>Data</b>
    0.0000730: leftJoined <i>msVendor</i> as <b>Vendor</b>
    0.0000670: leftJoined <i>msProductFile</i> as <b>medium</b>
    0.0000019: Grouped by <b>msProduct.id, `medium`.url</b>
    0.0000260: Added selection of <b>msProduct</b>: <small>`id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `alias_visible`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`</small>
    0.0000181: Added selection of <b>msProductData</b>: <small>`article`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`, `hit`, `sale`, `stock`, `param1`, `param2`, `param3`, `param4`, `param5`, `param6`, `param8`, `param7`, `param9`, `param10`, `param11`, `param12`, `param13`, `param14`, `param15`, `param16`, `param17`, `nal`, `param18`, `param19`, `param20`</small>
    0.0000122: Added selection of <b>msVendor</b>: <small>`name` AS `vendor.name`, `resource` AS `vendor.resource`, `country` AS `vendor.country`, `logo` AS `vendor.logo`, `address` AS `vendor.address`, `phone` AS `vendor.phone`, `fax` AS `vendor.fax`, `email` AS `vendor.email`, `description` AS `vendor.description`, `properties` AS `vendor.properties`</small>
    0.0000060: Added selection of <b>msProductFile</b>: <small>url as `medium`</small>
    0.0004110: Processed additional conditions
    0.0006080: Added where condition: <b>class_key=msProduct, Data.hit=1, OR:Data.sale=1, OR:Data.new=1, OR:Data.stock=1, msProduct.parent:IN(13,14,15,16,17,18,19,22,21,20,23), OR:msProduct.id:IN(20), msProduct.published=1, msProduct.deleted=0</b>
    0.0000429: Sorted by <b>msProduct.id</b>, <b>ASC</b>
    0.0000021: Limited to <b>12</b>, offset <b>0</b>
    0.0003200: SQL prepared <small>"SELECT `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`alias_visible`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, `Data`.`article`, `Data`.`price`, `Data`.`old_price`, `Data`.`weight`, `Data`.`image`, `Data`.`thumb`, `Data`.`vendor`, `Data`.`made_in`, `Data`.`new`, `Data`.`popular`, `Data`.`favorite`, `Data`.`tags`, `Data`.`color`, `Data`.`size`, `Data`.`source`, `Data`.`hit`, `Data`.`sale`, `Data`.`stock`, `Data`.`param1`, `Data`.`param2`, `Data`.`param3`, `Data`.`param4`, `Data`.`param5`, `Data`.`param6`, `Data`.`param8`, `Data`.`param7`, `Data`.`param9`, `Data`.`param10`, `Data`.`param11`, `Data`.`param12`, `Data`.`param13`, `Data`.`param14`, `Data`.`param15`, `Data`.`param16`, `Data`.`param17`, `Data`.`nal`, `Data`.`param18`, `Data`.`param19`, `Data`.`param20`, `Vendor`.`name` AS `vendor.name`, `Vendor`.`resource` AS `vendor.resource`, `Vendor`.`country` AS `vendor.country`, `Vendor`.`logo` AS `vendor.logo`, `Vendor`.`address` AS `vendor.address`, `Vendor`.`phone` AS `vendor.phone`, `Vendor`.`fax` AS `vendor.fax`, `Vendor`.`email` AS `vendor.email`, `Vendor`.`description` AS `vendor.description`, `Vendor`.`properties` AS `vendor.properties`, `medium`.url as `medium` FROM `cms_site_content` AS `msProduct` LEFT JOIN `cms_ms2_products` `Data` ON `msProduct`.`id` =  `Data`.`id` LEFT JOIN `cms_ms2_vendors` `Vendor` ON Data.vendor=Vendor.id LEFT JOIN `cms_ms2_product_files` `medium` ON `medium`.product_id = msProduct.id AND `medium`.rank = 0 AND `medium`.path LIKE '%/medium/%' WHERE  ( `msProduct`.`class_key` = 'msProduct' AND `Data`.`hit` = '1' AND `msProduct`.`OR` Data.sale '1' AND `msProduct`.`OR` Data.new '1' AND `msProduct`.`OR` Data.stock '1' AND  ( `msProduct`.`parent` IN (13,14,15,16,17,18,19,22,21,20,23) OR `msProduct`.`id` IN (20) )  AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 )  GROUP BY msProduct.id, `medium`.url ORDER BY msProduct.id ASC LIMIT 12 "</small>
    0.0004580: Could not process query, error #1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Data.sale '1' AND `msProduct`.`OR` Data.new '1' AND `msProduct`.`OR` Data.stock ' at line 1
    0.0021019: <b>Total time</b>
    4 194 304: <b>Memory usage</b>
    </pre>
      Олег Щавелев
      13 декабря 2019, 23:49
      0
      Попробуйте так.
      &where=`{"Data.hit:=":1,"OR:Data.sale:=":1,"OR:Data.new:=":1,"OR:Data.stock:=":1}`
      Антон Тарасов
      13 декабря 2019, 10:06
      0
      И два условия сработает, а вот с тремя будет сложнее, ибо в массиве не должно быть двух одинаковых ключей.
      Можно попробовать(пока вспоминаю про сложный json) просто строку указать:

      &where=`{"Data.hit =1 OR Data.sale =1 OR Data.stock = 1"}`
        Максим
        13 декабря 2019, 10:17
        0
        Выводит все товары, даже у которых нет этих параметров
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        5