假设我有一个包含两列id,name的简单查找表。我想从表中选择一组给定的名称。另外,我希望name列的比较不区分大小写。
例如,我有一个小写名称'apple','orange','banana'的数组,并希望执行如下查询:
SELECT id FROM lookup_table WHERE LOWER(name) IN ('apple','orange','banana').
到目前为止,我有以下代码来创建语句并正确绑定我的名称数组:
$sql = new Sql($this->adapter);
*$select = $sql->select();*
$select->from('lookup_table')
->columns(array('id'))
->where(new \Zend\Db\Sql\Predicate\In('name',array('apple','orange','banana')));
$result = $sql->prepareStatementForSqlObject($select)->execute();
$returnArray = array();
foreach ($result as $r) {
$returnArray[] = $r['id'];
}
return $returnArray;
我无法解决的问题是在where子句中的名称列周围包装LOWER()函数。我认为你不能将表达式传递给Zend \ Db \ Sql \ Predicate \ In的标识符部分。
有什么想法吗?
:WQ
答案 0 :(得分:0)
您可以使用类似
的内容$select->where->expression('lower(name) IN (?)', array('apple','orange','banana'));