pdoResources и сравнение ТВ с числом
Добрый день!
Необходимо отобрать ресурсы, у которых обычная цена и цена по акции меньше определенного числа. У некоторых ресурсов цена по акции не заполнена. У обоих ТВ указан тип число.
Версия pdoTools — 1.9.4
Делаю так:
Вот такой лог:
Читал вот эти темы, но не получается применить правильно к своей проблеме. Темы похожи, но не помогают.
modx.pro/help/1664/
modx.pro/help/3408/
modx.pro/help/3717/
modx.pro/help/3408/
modx.pro/help/3055/
Необходимо отобрать ресурсы, у которых обычная цена и цена по акции меньше определенного числа. У некоторых ресурсов цена по акции не заполнена. У обоих ТВ указан тип число.
Версия pdoTools — 1.9.4
Делаю так:
$_GET['to'] = 300000;
$tvFilters .= 'projectPrice<='.$_GET['to'].'||';
$tvFilters .= 'action_price<='.$_GET['to'];
$output = $modx->runSnippet('pdoPage@search',array(
'element' => 'pdoResources',
'tpl' => 'project_item',
'hideContainers' => '1',
'parents' => 2,
'includeTVs' => 'projectPrice,action_price',
'limit' => '10',
'tvFilters' => $tvFilters,
'sortbyTV' => 'projectPrice',
));
Вот такой лог:
0.0001719: pdoTools loaded
0.0000341: xPDO query object created
0.0000699: Added TVs filters
0.0004590: Included list of tvs: action_price, projectPrice
0.0003588: leftJoined modTemplateVarResource as TVaction_price
0.0003102: leftJoined modTemplateVarResource as TVprojectprice
0.0011749: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `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`
0.0000219: Added selection of modTemplateVarResource: IFNULL(`value`, '0') AS `tv.action_price`
0.0000331: Added selection of modTemplateVarResource: IFNULL(`value`, '0') AS `tv.projectPrice`
0.0000870: Replaced TV conditions
0.0017989: Processed additional conditions
0.0024650: Added where condition: 0=((`TVprojectprice`.`value` <= '300000') OR (`TVaction_price`.`value` <= '300000')), modResource.parent:IN(2,3,4,300,5,372,301,302,53,59,65,71,77,83,89,95,101,107,113,125,131,161,167,173,75,117,141,147,153,159,165,177,183,191,397,394,361,461,34,43,47,415,416,417,418,428,454,419,445,420,423,11,202,401,212,222,217,400,238,489,483,297,199,204,209,214,219,476,224,229,235,240,313,465,466,467,468,469,470,471,472,473,474,73,127,139,331,200,205,210,215,225,230,236,241,185,186,6,196,242,245,246,247,248,249,254,259,265,197,269,270,271,272,273,274,275,276,277,365,279,280,243,244,250,251,252,253,255,256,257,258,260,261,262,263,264,266,267,268,354,446,281,282,283,284,285,286,287,288,289,290,291), modResource.published=1, modResource.deleted=0, modResource.isfolder=0
0.0001020: Replaced TV conditions
0.0005360: Sorted by CAST(`TVprojectprice`.`value` AS DECIMAL(13,3)), ASC
0.0000110: Sorted by modResource.publishedon, DESC
0.0000060: Limited to 10, offset 40
0.0003431: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties`, IFNULL(`TVaction_price`.`value`, '0') AS `tv.action_price`, IFNULL(`TVprojectprice`.`value`, '0') AS `tv.projectPrice` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVaction_price` ON `TVaction_price`.`contentid` = `modResource`.`id` AND `TVaction_price`.`tmplvarid` = 27 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVprojectprice` ON `TVprojectprice`.`contentid` = `modResource`.`id` AND `TVprojectprice`.`tmplvarid` = 6 WHERE ( ((`TVprojectprice`.`value` <= '300000') OR (`TVaction_price`.`value` <= '300000')) AND `modResource`.`parent` IN (2,3,4,300,5,372,301,302,53,59,65,71,77,83,89,95,101,107,113,125,131,161,167,173,75,117,141,147,153,159,165,177,183,191,397,394,361,461,34,43,47,415,416,417,418,428,454,419,445,420,423,11,202,401,212,222,217,400,238,489,483,297,199,204,209,214,219,476,224,229,235,240,313,465,466,467,468,469,470,471,472,473,474,73,127,139,331,200,205,210,215,225,230,236,241,185,186,6,196,242,245,246,247,248,249,254,259,265,197,269,270,271,272,273,274,275,276,277,365,279,280,243,244,250,251,252,253,255,256,257,258,260,261,262,263,264,266,267,268,354,446,281,282,283,284,285,286,287,288,289,290,291) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 AND `modResource`.`isfolder` = 0 ) ORDER BY CAST(`TVprojectprice`.`value` AS DECIMAL(13,3)) ASC, modResource.publishedon DESC LIMIT 40, 10 "
0.0001369: SQL executed
0.0001581: Total rows: 42
0.0000391: Rows fetched
0.0035081: Prepared and processed TVs
0.0010271: Loaded chunk "project_item"
0.0117111: Returning processed chunks
0.0218921: Total time
7 602 176: Memory usage
В итоге выводятся ресурсы, у которых цена намного выше, чем необходима. Пытался и where чистый SQL писать, но ничего не добился.Читал вот эти темы, но не получается применить правильно к своей проблеме. Темы похожи, но не помогают.
modx.pro/help/1664/
modx.pro/help/3408/
modx.pro/help/3717/
modx.pro/help/3408/
modx.pro/help/3055/
Комментарии: 4
Необходимо отобрать ресурсы, у которых обычная цена и цена по акции меньше определенного числа
'||' ???
'||' ???
Да, именно так. Например, нам нужны ресурсы с ценой не более 500 000 р. Обычная цена может быть 600 000, а цена по акции 450 000. Такой ресурс должен попасть в выборку, поэтому используется ||.
хз… мне вот эт не нравится '300000'
попробуй просто через where
попробуй просто через where
&where=`["TVprojectprice.value <= 30000 OR TVaction_price.value <= 30000 "]`
Спасибо. Это работает. Несмотря на многочисленные обсуждения спрошу еще раз: получается, чтобы сравнить ТВ с числом нужно вручную писать where?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.