如何在db2中为任意SQL的NOT in子句绑定createCommand数组


How do you bind an array in Yii for createCommand in a NOT IN clause for arbitrary SQL?

如何在任意SQL中使用createCommand()语句绑定IN子句的数组?

$sql = ...   "where campaign.id not in (:notThese) " ...
$campaignId = Yii::$app->db->createCommand($sql)
  //->bindValue(':notThese', ...)
  ->queryScalar();

我用createCommand()因为我用group byhaving。这和这个问题很相似& &;答案https://stackoverflow.com/a/31753889/148844但我希望在Yii中有一个更优雅的方式。这个公认的答案是更新。另一个答案很尴尬。createCommand()似乎没有IN子句的任何功能。

一些我想对你有帮助的例子:

$values=[4,1];
$campaignId = (new 'yii'db'Query())->from('campaign')->where(['not in','campaign.id',$values])->groupBy(['groupcolumn'])->scalar();
//  SELECT * FROM `campaign` WHERE `campaign.id` NOT IN (4, 1) GROUP BY `groupcolumn`;
$campaignId = (new 'yii'db'Query())->from('campaign')->groupBy(['groupcolumn'])->having(['not in','campaign.id',$values])->scalar();
//  SELECT * FROM `campaign` GROUP BY `groupcolumn` HAVING `campaign.id` NOT IN (4, 1) ;

您应该使用yii'db'Query来使用这些功能

$campaignId = (new 'yii'db'Query())->from('campaign')->where(['in','campaign.id',$values])->scalar();