1

使用 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'))
              )

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

4

4 回答 4

1

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

$select->where('p.brandid  IN (?)',implode(",",$details[brand]));
于 2012-07-20T06:48:58.583 回答
1

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

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

就我而言,这是完全相反的explode解决方案:

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

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

于 2015-10-15T21:08:52.313 回答
0

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

locate(concat(',',$details[brand],','),concat(',',p.brandid,','))>0
于 2012-07-20T06:50:36.133 回答
0

只需使用

$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;
于 2019-07-19T20:18:21.290 回答