Джоины подзапросов средствами xPDO

Материал для экспертов. Вообще с этой задачей бился не один год, и вот только сегодня победил… Задача: средствами xPDO в запрос добавить подзапрос, то есть еще один select. Пример такого запроса: Вообще, если у кого-то есть свои варианты решения данной задачи, напишите в комментариях, было бы интересно глянуть. Итак, простого решения я не нашел. Вариант типа $q->leftJoin("(select * from modx_users)", «t1», «modResource.creteadby = t1.id»); не канает, так как xPDOQuery::leftJoin() ожидает первым параметром имя xPDO-класса, получив который будет пытаться определить имя таблицы методом xPDO::getTableName(). В результате мы получим ошибку: Вот мой вариант решения этой задачи: Можно этот же запрос расширить xPDO-подзапросом: На выходе получаем SQL-запрос: Такой метод формирования запроса хорош тем, что имеющийся объект xPDOQuery $q можно использовать и для подсчета количества найденных строк $modx->getCount('modResource', $q), и для установки лимитов $q->limit($limit), и для сортировки $q->sortby(«modResource.id», «ASC»); и т.д. и т.п. Так же можно и в объекты сразу набивать $modx->getCollection(«modResource», $q) или $modx->getIterator(«modResource», $q). В общем, xPDO API можно использовать в полной мере. Так же в процессе поиска данного решения был освоен и иной промежуточный вариант: Получаемый запрос: Но, во-первых, это эквивалент inner join (то есть left join уже не получается, если нужен), а во-вторых, давно уже такой вариант запроса не считается стандартом, JOIN-ы предпочтительней.