【问题标题】:MySQL - Search Query between DATE_SUB() AND DATE_SUB() ErrorMySQL - 在 DATE_SUB() 和 DATE_SUB() 之间搜索查询错误
【发布时间】:2013-03-16 23:31:24
【问题描述】:

我正在尝试使用 DATE_SUB() 在 (date-7days) 和 (date-1day) 之间的日期范围之间进行搜索查询(使用 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)
";

有人可以帮忙吗?我已经尝试解决这个问题一周了,但没有运气

【问题讨论】:

  • 错误信息是什么?
  • 没有错误消息 - 只是查询的输出与输出不匹配,然后在我的日历日显示特定状态 - 但我可以看到输出正在搜索 26 而不是 25 - 在 2 个 date_sub() 之间进行搜索有什么问题吗?
  • @odd_duck 是否真的选择了 1 天前的 bb.end_dates?
  • @ExplosionPills 很抱歉听起来很愚蠢,但您能详细说明您的意思吗??

标签: php mysql date


【解决方案1】:

子句:

: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 字段被索引,这将允许使用索引。

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

【讨论】:

  • 这对我仍然不起作用,罗斯 - 只是我还是上面的人请假 - 而不是我需要的 end_date(听起来不粗鲁!)
  • 我对你的问题感到困惑。如果您将2013-03-26 替换为:day 参数,那么您想查找end_date2013-03-192013-03-25 之间的所有记录,对吗?如果是这样,上面的查询应该对你有用,如果不是,那么问题出在你代码的其他地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
  • 2012-12-02
  • 2021-03-02
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
相关资源
最近更新 更多