[英]How do I create a complex left outer join in Yii2?
如何在Yii2中执行此查询?
SELECT `keyword`.`id`, `keyword`, `volume`, `cpc`, `competition`, `keyword_id`
FROM `keyword`
LEFT JOIN `ad_group_keyword`
ON keyword.id = ad_group_keyword.keyword_id
and ad_group_id = 1
WHERE ((`keyword_id` IS NULL)
AND (NOT (`volume` IS NULL)))
AND (NOT (`cpc` IS NULL))
ORDER BY volume desc
LIMIT 1;
我尝试了以下和许多组合,但无法正确使用ON
部分。
$kw = Keyword::find()->select(['keyword.id', 'keyword', 'volume', 'cpc', 'competition', 'keyword_id'])->
leftJoin('ad_group_keyword', 'keyword.id = ad_group_keyword.keyword_id', ['ad_group_id'=>1])->
andWhere(['keyword_id'=>null])->
andWhere(['not', ['volume' => null]])->andWhere(['not', ['cpc' => null]])->
orderBy('volume desc')->asArray()->limit(1)->all();
上面的代码生成了这个SQL,它缺少ON
的第二个条件:
SELECT
keyword
。id
,keyword
,volume
,cpc
,competition
,keyword_id
FROMkeyword
LEFT JOINad_group_keyword
ON keyword.id = ad_group_keyword.keyword_id WHERE(({keyword_id
IS NULL)AND(NOT(volume
IS NULL)))AND(NOT(cpc
IS NULL))订单volume
上限1)
我也试过
leftJoin('ad_group_keyword', ['keyword.id'=>'keyword_id', 'ad_group_id'=>1])->
但它产生
FROM
keyword
LEFT JOINad_group_keyword
ON(keyword
。id
= 'keyword_id')AND(ad_group_id
= 1)
用'keyword_id'引号引起来,因此将其视为字符串!
文件: http ://www.yiiframework.com/doc-2.0/yii-db-query.html#leftJoin() -detail
(这就是为什么我讨厌使用ORM API。我将所有的时间都花在精通SQL上。现在,您使我学习了一种全新的方式来做同样的事情,有时这是不可能的。)
关于必须处理ORM API的说法,可以使用createCommand
方法。 您可以仅通过此方法使用原始sql查询。 所不同的是,您不会得到ActiveRecord[]
的结果,而只是得到array[]
的结果(通常适用于复杂的查询)。
$sql = "SELECT `keyword`.`id`, `keyword`, `volume`, `cpc`, `competition`, `keyword_id`
FROM `keyword`
LEFT JOIN `ad_group_keyword`
ON keyword.id = ad_group_keyword.keyword_id
and ad_group_id = 1
WHERE ((`keyword_id` IS NULL)
AND (NOT (`volume` IS NULL)))
AND (NOT (`cpc` IS NULL))
ORDER BY volume desc
LIMIT 1;";
$params = [];
$kw = Yii::$app->db->createCommand($sql, $params)->queryAll();
leftJoin('ad_group_keyword', ['and', 'keyword.id = keyword_id', "ad_group_id = $adGroupId"])->
嘘...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.