0

有没有人看到这个问题?

我正在尝试使用谓词来比较应该如下所示的语句中的整数

SELECT * FROM `table` WHERE (cat1=1 OR cat1=2 OR cat2 = 1 OR cat2 = 2);

这就是我所拥有的

$resultSet = $this->select(function (Select $select) {

        $where = new \Zend\Db\Sql\Where();
        $pred_1 = new \Zend\Db\Sql\Predicate\Like('cat1', 1);
        $pred_2 = new \Zend\Db\Sql\Predicate\Like('cat1', 2);
        $pred_3 = new \Zend\Db\Sql\Predicate\Like('cat2', 1);
        $pred_4 = new \Zend\Db\Sql\Predicate\Like('cat1', 2);
        $where->orPredicate($pred_1)->orPredicate($pred_2)->orPredicate($pred_3)->orPredicate($pred_4);

});

resultSet是一个对象,但它返回表中的所有结果,不过滤

4

2 回答 2

1
$resultSet = $this->select(function (Select $select) {

        $where = new \Zend\Db\Sql\Where();
        $pred_1 = new \Zend\Db\Sql\Predicate\Like('cat1', 1);
        $pred_2 = new \Zend\Db\Sql\Predicate\Like('cat1', 2);
        $pred_3 = new \Zend\Db\Sql\Predicate\Like('cat2', 1);
        $pred_4 = new \Zend\Db\Sql\Predicate\Like('cat1', 2);
        $where
           ->orPredicate($pred_1)
           ->orPredicate($pred_2)
           ->orPredicate($pred_3)
           ->orPredicate($pred_4)
       ;
       $select->where($where); // attach to the select object.
});
于 2013-07-15T12:42:51.430 回答
1

查看文档,您会找到所需的一切http://framework.zend.com/manual/2.0/en/modules/zend.db.sql.html#zend-db-sql-select

Zend 将为您完成大部分工作,您只需要提供一个数组。

$resultSet = $this->select(function (Select $select) {

    $select->where(array(
        'cat1 = 1', 'cat1 = 2', 'cat2 = 1', 'cat2 = 2'
    ), \Zend\Db\Sql\Predicate\PredicateSet::OP_OR);
});

\Zend\Db\Sql\Predicate\PredicateSet::OP_OR是您案件中的重要部分。

于 2013-07-15T11:52:25.723 回答