Как применить несколько условий к левому соединению на db_select? - PullRequest
3 голосов
/ 02 января 2012

Я пытаюсь присоединиться к рейтингам Fivestar для каждого узла, чтобы сортировать их по рейтингу.Проблема заключается в том, что значения Fivestar, которые я запрашиваю, хранятся в голосованияapi_cache в виде нескольких строк на узел (подсчет голосов и средний рейтинг), поэтому я хочу сделать следующее:

...
LEFT JOIN votingapi_cache fivestar
ON fivestar.entity_id = node.nid
AND fivestar.function = 'average'

Я пробовалследующий код, но проблема в том, что проверка «fivestar.function = 'average” "добавлена ​​в предложение where, которое исключает все узлы, у которых нет голосов.

$query->leftjoin('votingapi_cache', 'fivestar', 'fivestar.entity_id = n.nid');
$query->condition('fivestar.function', 'average', '=');
$query->addField('fivestar', 'value', 'average_rating');

Хорошо,в первый раз, когда я попробовал это, я, должно быть, сделал что-то не так, но вот решение:

$query->leftjoin('votingapi_cache', 'fivestar', "fivestar.entity_id = n.nid AND fivestar.function = 'average'");

Ответы [ 2 ]

10 голосов
/ 02 января 2012

Хорошо, когда я впервые попробовал это, я, должно быть, сделал что-то не так, но вот решение:

$query->leftjoin('votingapi_cache', 'fivestar', "fivestar.entity_id = n.nid AND fivestar.function = 'average'");
0 голосов
/ 10 августа 2017

Здесь несколько условий объединения с условием IN внутри объединения с использованием массива PHP для получения правильных результатов.

$query->leftJoin('element_item','ei','ei.id = ei.id2 AND (ei.param = '.$entity_param.' AND ei.id IN ('.implode(',',$records).'))');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...