我正在尝试加入每个节点的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'");
答案 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).'))');