2013-03-26 99 views
0

我試圖做一個搜索查詢(使用pdo php和mysql)之間的日期範圍之間(日期7天)和(日期1天)使用DATE_SUB()在兩個所以例如:MySQL - DATE_SUB()和DATE_SUB()之間的搜索查詢錯誤

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

的下面查詢然而使用第一DATE_SUB(7天的間隔),但忽略了第二(DATE_SUB(1天間隔),所以它2013年3月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) 
"; 

任何人都可以請幫忙嗎?我一直試圖解決這個問題一個星期,現在沒有運氣

+0

錯誤信息是什麼? – 2013-03-26 23:44:47

+0

沒有錯誤消息 - 它只是查詢的輸出不匹配從輸出我然後顯示在我的日曆天的具體狀態 - 但我可以看到輸出搜索到26而不是25 - 是否有任何問題2 date_sub()之間的搜索? – 2013-03-26 23:48:14

+0

@odd_duck是否真的選擇了1天前的bb.end_date? – 2013-03-26 23:57:08

回答

0

子句:

: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字段建立索引,這將允許使用索引。

如果要搜索的字段包含在函數中,則不會使用索引。

+0

這仍然不適合我羅斯 - 是隻是我或上述日間休息日 - 不是結束日期,這是我需要的(不要聽起來粗魯!) – 2013-03-27 00:57:52

+0

我很困惑你的問題。如果用'2013-03-26'代替':day'參數,那麼你想要找到'end_date'介於'2013-03-19'和'2013-03-25'之間的所有記錄,對嗎?如果是這樣,上面的查詢應該適合你,如果沒有,那麼問題在於你的代碼中的其他地方。 – 2013-03-27 01:07:08