【问题标题】:Zend Framework Mysql WHERE IN clauseZend Framework Mysql WHERE IN 子句
【发布时间】:2012-07-19 10:08:52
【问题描述】:

使用 zend 框架,我使用了一个查询,有一个 IN 子句,这是我的查询

       $select->where('p.brandid  IN (?)',$details[brand]);

在上面的查询中,$details[brand] 的值类似于这个 array(1,2,3)。

实际上查询必须返回所有与这个数组(1,2,3)相关的值。

但我的查询返回的是与上述数组 (1,2,3) 中存在的第一个值相关的结果。即不考虑单独的 1,其他 2,3。

当我打印这个查询时,它显示如下

             [where] => Array
               (
                [0] => (p.brandid  IN ('1,2,3'))
              )

谁能告诉我我犯了什么错误或解决方案..

【问题讨论】:

    标签: php mysql zend-framework where-in


    【解决方案1】:

    这是因为您的查询格式错误 p.brandid IN ('1,2,3') 而不是 p.brandid IN (1,2,3) 您可以尝试在 php 中使用 implode 函数

    $select->where('p.brandid  IN (?)',implode(",",$details[brand]));
    

    【讨论】:

      【解决方案2】:

      只是小研究,因为我有同样的问题。

      我不确定您使用的是哪个版本的 Zend。但@Omesh 提供的解决方案不适用于我的 1.12 版。

      在我的情况下是完全相反的explode 解决方案:

      $select->where('p.brandid  IN (?)', explode(',',$details[brand]));
      

      可能取决于$details['brand'] 的类型。就我而言,我有像555,666,777,877 这样的字符串。但即使你在那里有数组。如果 Zend 在您的情况下接受 stringimplode 的结果)并且不接受 array,那就很奇怪了。就我而言,它不接受string,但接受array

      【讨论】:

        【解决方案3】:

        你可以根据 Zend 框架修改这个

        locate(concat(',',$details[brand],','),concat(',',p.brandid,','))>0
        

        【讨论】:

          【解决方案4】:

          随便用

          $select->where->in('field_name', $your_simple_array);
          

          如果你之前使用 where() 函数和某些条件,比如

          $select->where(['field_name' => $value]);
          

          只使用它后面的第一个,比如

          $select->where(['field_name' => $value]);
          $select->where->in('field_name', $your_simple_array);
          

          永远记住不要将where用作函数where(),而应仅用作关键字。

          这是有效的,我在以下情况下进行了测试:

          $select = $this->tableGateway->getSql()->select()->where(['field1' => $v1, 'field2' => $v2]);
          $select->where->in('field_name', ['v1', 'v2', 'v3']);
          

          即在模型类的开头使用这些库:

          use Zend\Db\Sql\Sql;
          use Zend\Db\Sql\Where;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-07
            • 1970-01-01
            • 1970-01-01
            • 2020-10-13
            • 2018-04-12
            • 1970-01-01
            • 1970-01-01
            • 2012-06-16
            相关资源
            最近更新 更多