php - MySQL - DATE_SUB() 和 DATE_SUB() 错误之间的搜索查询

标签 php mysql date

我正在尝试在 (date-7days) 和 (date-1day) 之间的日期范围内使用 DATE_SUB() 进行搜索查询(使用 pdo php 和 mysql),例如:

end_date is 2013-03-26
search between 2013-03-19 and 2013-03-25 ` 

下面的查询使用第一个 date_sub(7 天间隔)但忽略第二个(date_sub(1 天间隔)所以它在 2013-03-19 和 2013-03-26 之间搜索。

$sevd_query = " 
    SELECT 
        booking_id,
        DATE_FORMAT(start_date, '%e/%c') AS s_d,
        DATE_FORMAT(end_date, '%e/%c') AS e_d
    FROM 
        bsi_bookings as bb 
    INNER JOIN 
        bsi_reservation as br ON bb.booking_id=br.bookings_id
    WHERE 
        bc.c_id=:c_id AND
       :day BETWEEN DATE_SUB(bb.end_date, INTERVAL 7 DAY) AND DATE_SUB(bb.end_date, INTERVAL 1 DAY)
";

有人可以帮忙吗?我已经尝试解决这个问题一个星期了,但没有成功

最佳答案

从句:

:day BETWEEN DATE_SUB(bb.end_date, INTERVAL 7 DAY) AND
             DATE_SUB(bb.end_date, INTERVAL 1 DAY)

可以表示为:

day >= (end_date - 7) AND
day <= (end_date - 1)

可以重写为:

(day + 7) >= end_date AND
(day + 1) <= end_date

这与:

end_date <= (day + 7) AND
end_date >= (day + 1)

这也是:

end_date >= (day + 1) AND
end_date <= (day + 7)

也可以写成:

end_date BETWEEN (day + 1) AND (day + 7)

我认为这不是您想要的。

试试这个:

SELECT 
    booking_id,
    DATE_FORMAT(start_date, '%e/%c') AS s_d,
    DATE_FORMAT(end_date, '%e/%c') AS e_d
FROM 
    bsi_bookings as bb 
INNER JOIN 
    bsi_reservation as br ON bb.booking_id=br.bookings_id
WHERE 
    bc.c_id=:c_id AND
    bb.end_date BETWEEN :day - INTERVAL 7 DAY AND :day - INTERVAL 1 DAY;

如果 end_date 字段被索引,这将允许使用索引。

如果要搜索的字段包含在函数中,则不会使用索引。

关于php - MySQL - DATE_SUB() 和 DATE_SUB() 错误之间的搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15649466/

相关文章:

mysql - 如何使用sparkSQL将天(+1)添加到(mm/dd/yyyy)中的日期

java - 从 InputStream 解析日期时出现 ParseException

PHP:我可以在 array_map 函数中获取索引吗?

php - 如何使用带有自定义用户名列的 Laravel Passport

php - 一次执行多个命令

java - 如何向日历添加长值?

java - 如何将 java.sql.Date 和 java.sql.Time 合并到 java.util.Date?

php - PHP 中的 MySQL 结果数组

mysql - 如何检查当前行是否是sql查询中最后选择的行?

mysql - MySQL 中的连接不起作用