微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

zend-framework2 – 在Where子句中的Zf2 NOT IN表达式

我试图从另一个表中尚未出现的表中获取结果.
为此,我在where子句中使用subQuery和NOT IN表达式.正常的sql工作如下:
SELECT `products`.* FROM `products` WHERE `products`.`pro_id` **NOT IN** (
SELECT `product_collection`.`pro_id` AS `pro_id` FROM `product_collection` WHERE `coll_id` = '6' ) AND products.pro_id IN (55,56,57,62)

我在项目中使用zf2.问题是我不知道如何在where子句中使用NOT IN表达式.我们可以在Where子句中使用where-> in()作为IN表达式.例如.

//$productIds is an array
//$collectionId is an id

$subSelect = $this->getRawsql()->select('product_collection');
$subSelect -> columns(array('pro_id'));
$subSelect -> where(array('coll_id'=>$collectionId));

$select = $this->getRawsql()->select('products');
$select -> **where->in**('products.pro_id',$subSelect)
        -> where->in('products.pro_id',$productIds);

但我不知道如何使用NOT IN表达式.

像使用In()一样使用notin().
见: http://framework.zend.com/apidoc/2.1/classes/Zend.Db.Sql.Predicate.NotIn.html
$subSelect = $this->getRawsql()->select('product_collection');
$subSelect -> columns(array('pro_id'));
$subSelect -> where(array('coll_id'=>$collectionId));

$select = $this->getRawsql()->select('products');
$select ->where->notin('products.pro_id',$subSelect)    
        ->where->in('products.pro_id',$productIds);

编辑:

或者改用它

$select ->where
        ->addPredicate(new Zend\Db\sql\Predicate\Expression('products.pro_id NOT IN (?)',array($subSelect)))

原文地址:https://www.jb51.cc/php/134895.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐