我们正在使用Yii Framework并创建了一个搜索表单以包含以下DatePicker widge:
<?php echo $form->labelEx($model, 'availability_start_date');?>
<?php
Yii::import('zii.widgets.jui.CJuiDatePicker');
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'name'=>'stattDate',
'options'=>array(
'showAnim'=>'fold',
),
'htmlOptions'=>array(
'style'=>'height:20px;'
)
));
?>
Run Code Online (Sandbox Code Playgroud)
此小组件需要用于从上述小组件中指定的值搜索具有availability_start_date +/- 2天的用户.
我们的UserController具有以下连接逻辑:
if ($search_frm['availability_start_date']){
$join .= ' LEFT JOIN user_availability_start_date usd on u.id = usd.id';
$where .= 'AND usd.availability_start_date >= '.$search_frm
['availability_start_date'];
}
Run Code Online (Sandbox Code Playgroud)
目前,WHERE子句中的逻辑只是要求匹配,其中availability_start_date大于或等于小部件的值.
如何修改上面的WHERE子句以选择窗口小部件的值与availability_start_date值不同+/- 2天的那些记录?
更新:我修改了where子句,内容如下:
if ($search_frm['availability_start_date']){
$join .= ' LEFT JOIN user_availability_start_date usd on u.id = usd.id';
$where .= ' AND usd.availability_start_date >= DATE_ADD('.$search_frm.',
INTERVAL -2 DAY)
AND usd.availability_start_date <= DATE_ADD(' .$search_frm.', INTERVAL 2 DAY)';
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我测试逻辑时,会返回不符合此条件的记录.表单或页面上不会抛出任何错误.
DATEDIFF()以天为单位返回值.对于+/- 2天,您将需要使用ABS()返回的绝对值DATEDIFF(),验证它是否<= 2.
$where .= "AND ABS(DATEDIFF(DATE(usd.availability_start_date), DATE('" . $search_frm['availability_start_date'] . "'))) <= 2";
Run Code Online (Sandbox Code Playgroud)
我还包裹的参数DATEDIFF()中DATE(),如果它们存在于截断关闭的时间的部分.如果您的申请不需要,请删除它们.