如何在db_select上对左连接应用多个条件?

时间:2012-01-01 22:26:27

标签: drupal-7

我正在尝试加入每个节点的Fivestar评级,以便我可以按评分对它们进行排序。问题是我查询的Fivestar值存储在votingapi_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 个答案:

答案 0 :(得分:10)

好的,我第一次尝试这个时,我一定做错了,但这是解决方案:

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

答案 1 :(得分:-1)

这里有一些具有IN条件的多个连接条件,其中包含内部PHP数组以获得正确的结果。

$query->leftJoin('element_item','ei','ei.id = ei.id2 AND (ei.param = '.$entity_param.' AND ei.id IN ('.implode(',',$records).'))');