Здравствуйте, набросал запрос, который содержит в себе подзапрос
<?php
//Подзапрос, возвращающий количество голосов для ноды.
$subquery = db_select('votingapi_cache','vac');
$subquery->fields('vac', array('value'));
$subquery->condition('vac.entity_id', 'n.nid', '=');
$subquery->condition('vac.entity_type', 'node', '=');
$subquery->condition('vac.tag', 'vote', '=');
$subquery->condition('vac.function', 'count', '=');
//Запрос, возвращающий список нод пользователя: заголовок, дата создания, кол-во голосов, рейтинг ноды.
$query = db_select('node','n')->extend('PagerDefault')->extend('TableSort');
$query->innerJoin('votingapi_cache', 'vc', 'n.nid = vc.entity_id');
$query->addExpression('(' . $subquery . ')', 'count_votes'); //Внедряем подзапрос.
$query->addExpression('ROUND(vc.value * 5 / 100, 1)', 'rating');
$query->fields('n', array('title','created','nid'));
$query->condition('n.uid', $user->uid, '=');
$query->condition('n.type', 'article', '=');
$query->condition('vc.entity_type', 'node', '=');
$query->condition('vc.function', 'average', '=');
$query->condition('vc.tag', 'vote', '=');
$query->limit(10);
$query->orderByHeader($header);
$result = $query->execute()->fetchAll();
?>
Вроде бы все нормально, но Drupal каким-то непонятным мне образом подменяет значения в условиях подзапроса.
Смотрим что получилось:
<?php
dpq($query);
?>
В итоге непонятным для меня образом в запросе появилось не то, что мне нужно. Господа, что за магия?
Вложение | Размер |
---|---|
![]() | 44.08 КБ |
Комментарии
Можно упростить подзапрос не нужен, используйте join.
Подзапрос нужен, так как в подзапросе и в запросе есть 2 противоречащих условия.
<?php
$subquery->condition('vac.function', 'count', '=');
?>
<?php
$query->condition('vc.function', 'average', '=');
?>
Неужели никто не знает почему Drupal выстраивает мой подзапрос с другими значениями?
Не нужен так как условия к разным алиалсам и полям, учите мат. часть в Core куча примеров.
Спасибо Вам, запрос работает.