gpt4 book ai didi

php - Where子句中的MySQL DateDiff?

转载 作者:可可西里 更新时间:2023-11-01 07:53:39 24 4
gpt4 key购买 nike

我们使用 Yii 框架并创建了一个搜索表单以包含以下 DatePicker 小部件:

<?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;'
)
));
?>

此小部件需要用于搜索 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'];
}

目前 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)';
}

不幸的是,当我测试逻辑时,返回的记录不符合此条件。表单或页面上不会抛出任何错误。

最佳答案

DATEDIFF() 返回以天为单位的值。对于 +/- 2 天,您需要使用绝对值 ABS()DATEDIFF() 返回, 验证它是 <= 2 .

$where .= "AND ABS(DATEDIFF(DATE(usd.availability_start_date), DATE('" . $search_frm['availability_start_date'] . "'))) <= 2";

我还将参数包装到 DATEDIFF()DATE()截断时间部分(如果存在)。如果您的应用程序不需要它们,请将其删除。

关于php - Where子句中的MySQL DateDiff?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11783347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com