$criteria = new CDbCriteria();
$criteria->addCondition('admin_status = ' . Transaction::ADMIN_STATUS_WAITING);
$criteria->addCondition('status = ' . Transaction::ORDER_STATUS_WAITING);
$criteria->addCondition(
'DATE_SUB(CURRENT_DATE(), INTERVAL ' . $this->period . ' DAY) > DATE(order_date)'
);
if($this->type != null) {
$criteria->addCondition('type = ' . (int)$this->type);
}
$criteria->addCondition('admin_status = ' . Transaction::ADMIN_STATUS_REJECTED . ' AND status != ' . Transaction::ORDER_STATUS_REJECTED, 'OR');
我现在有什么:
((admin_status = 0) AND (status = 0)) AND (DATE_SUB(CURRENT_DATE(), INTERVAL 120 DAY)> DATE(order_date))) OR (admin_status = 2 AND status != 2)
我需要什么:
(((admin_status = 0) AND (status = 0)) AND (DATE_SUB(CURRENT_DATE(), INTERVAL 120 DAY)> DATE(order_date)))) OR (admin_status = 2 AND status != 2)
如何将3个第一标准合并为一个?
我需要(criteria1 AND criteria2 AND criteria3 ) OR (CRITERIA 4)
基本上,只需在一个条件中完成所有操作。即使它们是类常量,我仍然建议使用参数绑定。
$criteria = new CDbCriteria();
$criteria->addCondition('((((admin_status = :admin_status_waiting) AND (status = :order_status_waiting)) AND (DATE_SUB(CURRENT_DATE(), INTERVAL :period DAY) > DATE(order_date)))) OR (admin_status = :admin_status_rejected AND status != :order_status_rejected)');
$criteria->params = array(
':period' => $this->period,
':admin_status_waiting' => Transaction::ADMIN_STATUS_WAITING,
':order_status_waiting' => Transaction::ORDER_STATUS_WAITING,
':admin_status_rejected' => Transaction::ADMIN_STATUS_REJECTED,
':order_status_rejected' => Transaction::ORDER_STATUS_REJECTED
);
我想这已经是你想要的了,如果你检查正确的话
(
(
(admin_status = 0) AND (status = 0)
) AND (DATE_SUB(CURRENT_DATE(), INTERVAL 120 DAY) > DATE(order_date))
) OR (admin_status = 2 AND status != 2)
您只是想添加一对额外的括号。