使用zend框架,我使用了一个具有IN子句的查询,这是我的查询
$select->where('p.brandid IN (?)',$details[brand]);
在上面的查询中,$details[brand]的值类似于这个数组(1,2,3)。
实际上,查询必须返回所有与该数组(1,2,3)相关的值。
但我的查询返回了与上述数组(1,2,3)中的第一个值相关的结果。即不考虑单独的1和其他2,3。
当我打印这个查询时,它显示为这样的
[where] => Array
(
[0] => (p.brandid IN ('1,2,3'))
)
有人能告诉我我犯了什么错误或解决办法吗。。
这是因为您的查询格式错误p.brandid IN ('1,2,3')
而不是p.brandid IN (1,2,3)
,您可以尝试在php 中使用内爆函数
$select->where('p.brandid IN (?)',implode(",",$details[brand]));
只是小规模的研究,因为我也有同样的问题。
我不确定你用的是Zend的哪个版本。但@Omesh提供的解决方案不适用于我的1.12版本。
在我的情况下,它与explode
解决方案完全相反:
$select->where('p.brandid IN (?)', explode(',',$details[brand]));
这可能取决于$details['brand']
的类型。在我的情况下,我有类似555,666,777,877
的字符串。但即使你有阵列。如果Zend在您的情况下接受string
(implode
的结果)而不接受array
,那就很奇怪了。在我的情况下,它不接受string
,而是接受array
。
您可以根据Zend框架对此进行修改
locate(concat(',',$details[brand],','),concat(',',p.brandid,','))>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 ZendDbSqlSql;
use ZendDbSqlWhere;