Подзапрос в left/right/innerJoin через xPDO
Всем привет!
Помогите, пожалуйста, запрос через xPDO собрать.
Вот, в общем довольно типичный запрос:
Но как через xPDO в JOIN засунуть подзапрос?
В доках написано, что в leftJoin/rightJoin/innerJoin четвёртым параметром можно передавать xPDOQuery, что собственно я и сделал:
Но нужного результата это не принесло:
Задавал этот вопрос на modx-форуме, но там тишина.
Вот сижу и туплю теперь :-(
Помогите, пожалуйста, запрос через xPDO собрать.
Вот, в общем довольно типичный запрос:
SELECT `msDiscountCard`.`id`
`msDiscountCard`.`uid`,
`msDiscountCard`.`public`,
`msDiscountCard`.`discount_id`,
`msDiscountCard`.`amount`,
`msDiscountCard`.`amount_used`,
`msDiscountCardMember`.`user`
FROM `modx_ms2_discount_card` AS `msDiscountCard`
LEFT JOIN (
SELECT `msDiscountCardMember`.`id`,
`msDiscountCardMember`.`discount_card_id`,
`msDiscountCardMember`.`user_id`,
`msDiscountCardMember`.`owner_type`
FROM `modx_ms2_discount_card_members` AS `msDiscountCardMember`
WHERE `msDiscountCardMember`.`owner_type` = 'owner'
) AS `msDiscountCardMember`
ON `msDiscountCardMember`.`discount_card_id` = `msDiscountCard`.`id`
Но как через xPDO в JOIN засунуть подзапрос?
В доках написано, что в leftJoin/rightJoin/innerJoin четвёртым параметром можно передавать xPDOQuery, что собственно я и сделал:
$query = $modx->newQuery('msDiscountCard');
$subquery = $modx->newQuery('msDiscountCardMember');
$subquery->select('msDiscountCardMember.*');
$subquery->where(array(
'msDiscountCardMember.owner_type' => 'owner'
));
$query->select('msDiscountCard.*, msDiscountCardMember.*');
$query->leftJoin('msDiscountCardMember', 'msDiscountCardMember', 'msDiscountCard.id = msDiscountCardMember.discount_card_id', $subquery);
if ($query->prepare()) {
echo $query->toSQL();
}
//$cards = $modx->getIterator('msDiscountCard', $query);
Но нужного результата это не принесло:
SELECT msDiscountCard.*,
msDiscountCardMember.*
FROM `modx_ms2_discount_card` AS `msDiscountCard`
LEFT JOIN `modx_ms2_discount_card_members` `msDiscountCardMember`
ON msDiscountCard.id = msDiscountCardMember.discount_card_id
Задавал этот вопрос на modx-форуме, но там тишина.
Вот сижу и туплю теперь :-(
Комментарии: 1
Усё, вопрос решён.
Переделал запрос на такой:
И собрал его на xPDO вот так:
Переделал запрос на такой:
SELECT `msDiscountCard`.`id`,
`msDiscountCard`.`uid`,
`msDiscountCard`.`public`,
`msDiscountCard`.`discount_id`,
`msDiscountCard`.`amount`,
`msDiscountCard`.`amount_used`,
`msDiscountCardMember`.`user_id`,
`msDiscountCardMember`.`owner_type`,
`msDiscountCardMember`.`discount_card_id`
FROM `modx_bunny_lovems2_discount_card` AS `msDiscountCard`
LEFT JOIN `modx_bunny_lovems2_discount_card_members` AS `msDiscountCardMember`
ON `msDiscountCardMember`.`discount_card_id` = (
SELECT `msDiscountCardMember`.`discount_card_id`
FROM `modx_bunny_lovems2_discount_card_members` AS `msDiscountCardMember`
WHERE `msDiscountCardMember`.`owner_type` = 'owner'
AND `msDiscountCard`.`id` = `msDiscountCardMember`.`discount_card_id`
LIMIT 1
)
И собрал его на xPDO вот так:
$subquery = $modx->newQuery('msDiscountCardMember');
$subquery->select('`msDiscountCardMember`.`discount_card_id`');
$subquery->where(array(
'`msDiscountCardMember`.`owner_type`' => 'owner',
'`msDiscountCard`.`id` = `msDiscountCardMember`.`discount_card_id`'
));
$subquery->limit(1);
$query = $modx->newQuery('msDiscountCard');
$query->select('`msDiscountCard`.*, `msDiscountCardMember`.`user_id`');
if ($subquery->prepare()) {
$query->leftJoin('msDiscountCardMember', 'msDiscountCardMember', array(
'`msDiscountCardMember`.`discount_card_id` = ('. $subquery->toSQL() .')'
));
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.