我正在尝试在 (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/