在这种情况下,我想知道如何使用ZEND正确编写mySQL语句:
SELECT * FROM `users` WHERE role_id = 2 AND status = 2 AND bddate BETWEEN '1988-05-07' AND '1991-01-01' ORDER BY lastname DESC
我会有if语句,例如。如果在过滤器用户中选择了role_id,我会将它包含在WHERE等中,与其余部分相同。
到目前为止,我有1个WHERE条件,我已经这样做了(现在我需要更复杂的一个):
$select = $this->select()
->setIntegrityCheck(false)
->from(array('u'=>'users'))
->join(array('r'=>'user_roles'), 'u.role_id = r.role_id', array('role'=>'title'));
if(count($filters) > 0) {
foreach($filters as $field => $filter) {
$select->where($field . ' = ?', $filter);
}
}
if(null != $sortField) {
$select->order($sortField);
}
答案 0 :(得分:3)
好的,所以你遇到了BETWEEN的问题。有两种可能的解决方案:
a)你使用两个where子句来分割BETWEEN,所以你得到了
$select = $this->select()
//... other conditions
->where('bddate >= ?', '1988-05-07')
->where('bddate <= ?', '1991-01-01');
OR
b)
$select = $this->select()
//... other conditions
->where ('bddate BETWEEN '1988-05-07' AND '1991-01-01');
我会建议选项a),因为它正确地逃避了你的价值观。