Здесь массив добавлен, как в смарти

А зачем вообще нужна такая замечательный метод? Ужель нельзя просто microtime(true)? public function getMicroTime() { return microtime(true); }

Да xPDO вообще крутая штука честно говоря :) поправлю: $c = $modx->newQuery('modResource');

$c->innerJoin('modTemplateVar', 'tv1', "tv1.name='icon'"); $c->innerJoin('modTemplateVarResource', 'val1', "val1.contentid=modResource.id AND val1.tmplvarid = tv1.id AND val1.value='example-icon'");

$c->innerJoin('modTemplateVar', 'tv2', "tv2.name='isCosmos'"); $c->innerJoin('modTemplateVarResource', 'val2', "val2.contentid=modResource.id AND val2.tmplvarid = tv2.id AND val2.value='IS'");

$c = $modx->newQuery('modResource'); $c->innerJoin('modTemplateVarResource', 'tv', "tv.tmplvarid=modResource.id AND tv.tmplvarid = 1 AND tv.value='value1'"); $c->innerJoin('modTemplateVarResource', 'tv', "tv2.tmplvarid=modResource.id AND tv2.tmplvarid = 2 AND tv2.value='value2'"); Развивай далее запрос как хочется. Да, в xPDO не получается формировать запросы с подзапросами (типа select… where col.value in (select… from )) и т.п., но тем не менее на большинство задач тривиальных его хватает вполне.

Да все правильно :) фишка не в этом, если задача у нас будет — выбрать ресурсы у которых должны быть несколько TV полей определенного значения, а не ресурсы у которых имеется какая-то любая комбинация TV => Значение среди заданных в критерии. Я знаю что у тебя есть понимание, просто на SQL перевожу дабы меня поняли лучше :)

Посмотри еще раз внимательно мой запрос: $c = $modx->newQuery('modResource'); $c->leftJoin('modTemplateVarResource', 'TemplateVarResources'); $c->leftJoin('modTemplateVar', 'tv', "tv.id=TemplateVarResources.tmplvarid");

$c->where(array( array( "tv.name" => 'icon', "TemplateVarResources.value" => "example-icon", ), array( "OR:tv.name:=" => 'isCosmos', "TemplateVarResources.value" => "IS", ), )); Там не AND:, там OR:. И формируется вот такой SQL-запрос: SELECT modResource.* FROM modx_site_content AS modResource LEFT JOIN modx_site_tmplvar_contentvalues TemplateVarResources ON modResource.id = TemplateVarResources.contentid LEFT JOIN modx_site_tmplvars tv ON tv.id=TemplateVarResources.tmplvarid WHERE (
( tv.name = 'icon' AND TemplateVarResources.value = 'example-icon' )
OR
( tv.name = 'isCosmos' AND TemplateVarResources.value = 'IS' ) ) Поверь, у меня есть понимание SQL-запросов :) Так что я знаю, что говорю.

Ой понял сори, я то полагался на пред-просмотр, а в нем криво отображается содержимое тега code). Как я понял еще, мы друг друга сейчас вообще не понимаем) прям какой-то барьер) Механизм я понимаю, я знаю что xPDOQuery это абстракция SQL запроса — разница лишь в подходе(ООП) его организации, так-же как и xPDOObject представление объекта. Когда я писал: Через средства xPDO, твой вариант при использовании AND вообще ничего не вернет, т.к мы не можем ставить условие чтобы у 1 строчки tv_name был и 'name1' и 'name2' одновременно(AND), вот это и встало мне в горле когда уже открыл топик) в топике я указал мнимые UPD блоки в которых добавил наблюдения, решением послужил запрос: я имел ввиду: $c = $modx->newQuery('modResource'); $c->leftJoin('modTemplateVarResource', 'TemplateVarResources'); $c->leftJoin('modTemplateVar', 'tv', "tv.id=TemplateVarResources.tmplvarid");

$c->where(array( array( "tv.name" => 'icon', "TemplateVarResources.value" => "example-icon", ), array( "AND:tv.name:=" => 'isCosmos', "TemplateVarResources.value" => "IS", ), )); что эквивалентно: SELECT * FROM modx_site_content AS resource INNER JOIN modx_site_tmplvar_contentvalues AS val ON val.contentid = resource.id INNER JOIN modx_site_tmplvars AS tv ON tv.id = val.tmplvarid WHERE ( (tv.name = icon AND val.value = example-icon) AND (tv.name = isCosmos AND val.value = IS) ) То-есть когда нам нужны ресурсы у которых оба(или более) поля чему то равны, запрос всегда будет возвращать 0 строк, даже если и будут ресурсы с обоими TV параметрами в БД, проверь сам) Делая такой запрос с OR, мы получим ресурсы в которых какое либо указанное TV поле соответствует критерии — ну все верно ведь оператор OR.

про подсветку кода — имел ввиду синтаксис. Я понял. И как раз показал тебе как это делать. Ты прописываешь тег <pre>. Вот этого делать не нужно. Посмотри подсветку в моих комментах, и код без подсветки у себя в комменте. Найди 10 отличий. Лучше вставлять в тег <code> или пользоваться специальной кнопочкой.

Ты видимо недопонимаешь механизма xPDO. Сам xPDO ничего в базе данных не выбирает, у него нет какого-то собственного механизма прямого обращения к данным базы. xPDO формирует в итоге чистый SQL, и потом выполняет этот SQL-запрос к базе данных. Сделай так: $c = $modx->newQuery('modResource'); $c->leftJoin('modTemplateVarResource', 'TemplateVarResources'); $c->leftJoin('modTemplateVar', 'tv', "tv.id=TemplateVarResources.tmplvarid");

$c->where(array( array( "tv.name" => 'icon', "TemplateVarResources.value" => "example-icon", ), array( "OR:tv.name:=" => 'isCosmos', "TemplateVarResources.value" => "IS", ), )); // Готовим SQL-запрос $c->prepare(); // Выводим этот SQL-запрос print $c->toSQL(); На выходе ты увидишь сформированный SQL. То есть что ты сам напишешь чистый SQL, что подготовишь его средствами xPDO — разницы никакой не будет. А какой результат будет возвращен, зависит уже от этого SQL-запроса, и не вежно сам ты его написал, или xPDO сформировал.

Николай привет и спасибо) Может на ты будем? Да с вариантом с OR условиями я конечно, что-то не до сообразил) Но как быть если нам надо запросить по условиям по строже чем OR и поставить запрос c AND условиям по TV, такого типа SELECT * FROM обычная табла WHERE tv_name = 'value' AND 'tv_name_2' = 'value_2' Через средства xPDO, твой вариант при использовании AND вообще ничего не вернет, т.к мы не можем ставить условие чтобы у 1 строчки tv_name был и 'name1' и 'name2' одновременно(AND), вот это и встало мне в горле когда уже открыл топик) в топике я указал мнимые UPD блоки в которых добавил наблюдения, решением послужил запрос: /** SQL ver 3 SUPPORT COMPLETE STATEMENTS */ SELECT * FROM modx_site_content AS resource WHERE ( ( resource.id IN ( SELECT val.contentid FROM modx_site_tmplvars AS tv INNER JOIN modx_site_tmplvar_contentvalues AS val ON tv.id = val.tmplvarid WHERE (tv.name = 'icon' AND val.value = 'example-icon') ) ) AND / Условие */ ( resource.id IN ( SELECT val.contentid FROM modx_site_tmplvars AS tv INNER JOIN modx_site_tmplvar_contentvalues AS val ON tv.id = val.tmplvarid WHERE (tv.name = 'isCosmos' AND val.value = 'IS') ) )

) /** Запрос если бы дополнительные поля были бы основными: SELECT * FROM modx_site_content AS resource WHERE resource.icon = 'example-icon' AND resource.isCosmos = 'IS' */ я догадывался что я велосипед замучу, просто IDE(pshtorm) обновлял, наткнулся на встроенный менеджер баз данных проекта, начал ковыряться и попутно вспомнил что такой механизм с Tv мне был нужен;), про подсветку кода — имел ввиду синтаксис. Так то я в первый раз где либо топик написал)