【问题标题】:How to create WHERE IN clause with Zend_Db_Select如何使用 Zend_Db_Select 创建 WHERE IN 子句
【发布时间】:2008-12-04 06:26:24
【问题描述】:

所以我正在尝试完成这样的事情:

SELECT * FROM table WHERE status_id IN (1,3,4);

使用 Zend_Db_Select... 找不到怎么做 :( 有可能吗?

【问题讨论】:

    标签: zend-framework zend-db


    【解决方案1】:

    你也可以这样使用:

    $data = array(1,3,4);
    $select->where('status_id IN(?)', $data);
    

    你不需要内爆数组,而且更安全

    【讨论】:

    • 用谷歌搜索了这个问题并找到了您的解决方案 - 然后意识到我已经投票过一次。因此,由于我无法再次为您投票,请将此评论作为我的感谢!
    • 参数化 IN 的变化如此之多,感谢您为我节省了一个使用 google glopping 的夜晚!
    • Martin,我试过 implode,但看到整个字符串都被引用了。感谢您提供一个简单的解决方案。像魅力一样工作!
    • 此解决方案适用于 ZF1 但不适用于 ZF2,请参阅我的其他答案。
    • 内爆数组后对我不起作用。使用 zf2
    【解决方案2】:

    第一个答案可能在 ZF1 中有效,但在 Zend Framework 2 中无效:

    $data = array(1,3,4);
    $select->where('status_id IN(?)', $data);
    

    如果 Zend Framework2 我发现你必须使用:

    $data = array(1,3,4);
    $select->where(array('status_id' => $data));
    

    结果:

    WHERE `status_id` IN ('1', '3', '4')
    

    我在任何地方都找不到此文档! ZF 文档通常不是最理想的。

    【讨论】:

    • 是的,我可以确认第一个答案:$select->where('status_id IN(?)', $data);在 ZF1 中确实有效
    【解决方案3】:

    显然它是超级简单...愚蠢的我:

    $select->where('status_id IN(1,3,4)');
    

    :(

    【讨论】:

      【解决方案4】:

      我们可以使用Zend\Db\Sql\Predicate\InZend\Db\Sql\Where 在模型中进行where in 查询。

      $this->status_ids = array(1,3,4);
      
      // select attributes from db by where in 
      $result = $this->select(function (Select $select) {
         $predicate = new In();
         $select->where(
            $predicate->setValueSet($this->status_ids)
                      ->setIdentifier('status_id')
            );
      })->toArray();
      

      【讨论】:

        【解决方案5】:
        This solution works well with zf2     
         $ids = array('1', '2', '3', '4', '5', '6', '7', '8');
         $select->where(array("app_post_id"=> $ids));
        

         $ids = array('1', '2', '3', '4', '5', '6', '7', '8');
            $sql = new Sql($this->adapter);
                $select = $sql->select();
                $select->from('app_post_comments');
                $select->where(array("app_post_id"=> $ids));
        
        //        echo $select->getSqlString($this->adapter->getPlatform());
        //        exit;
                $statement = $sql->prepareStatementForSqlObject($select);
                $result = $statement->execute();
                $resultSet = new ResultSet();
                $resultSet->initialize($result);
                $resultSet->buffer()->toArray();
                echo '<pre>';
                print_r($resultSet);
                exit;
                return $resultSet;
        

        【讨论】:

          【解决方案6】:
          $completionNo = implode(",",$data);
          
          $db = Zend_Db_Table_Abstract::getDefaultAdapter();
          $select = $db->select()->from(array("p"=>PREFIX . "property_master"),array('id','completion_no','total_carpet_area'))->where("p.completion_no IN (?)", $completionNo);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-20
            • 1970-01-01
            相关资源
            最近更新 更多