2016-09-16 50 views
0

在數據庫之間的數據我有以下數據:如何編寫查詢來搜索日期

From date : 2016-09-01 06:00:00 
To date : 2016-09-04 08:00:00 

如果我從'08/01/2016 00:00:00' 要'09/05/2016 00搜索:00:00'這是給我以上的結果。

但問題是如果我從'08/01/2016 00:00:00'到'09/02/2016 00:00:00'搜索它,它不顯示我以上結果。

我的查詢是:

SELECT * FROM car_availability as c , car_trip_availability as ct 
WHERE c.car_id = ct.car_id 
AND c.car_category_id IN ($car_category_id_list) 
AND c.from_date_time >= :from_date_time 
AND c.to_date_time <= :to_date_time 
AND c.is_booked = :is_booked 
AND ct.trip_type_id =:trip_type_id 
AND ct.from_location_id =:from_location_id 
AND ct.to_location_id = :to_location_id 
+0

提示:在 – JYoThI

+0

之間使用mysql您正在使用datetime作爲該列的數據類型嗎? –

+0

是的我使用的日期時間 – Ninad

回答

0

首先,學會用正確的明確JOIN語法。簡單的規則:從不FROM條款中使用逗號;始終使用JOIN

重疊的邏輯不正確。請參見下面的最後兩行:

SELECT * 
FROM car_availability c JOIN 
    car_trip_availability ct 
    ON c.car_id = ct.car_id 
WHERE c.car_category_id IN ($car_category_id_list) AND 
     c.is_booked = :is_booked AND 
     ct.trip_type_id =:trip_type_id AND 
     ct.from_location_id =:from_location_id AND 
     ct.to_location_id = :to_location_id AND 
     c.from_date_time <= :to_date_time AND 
     c.to_date_time >= :from_date_time; 

兩個週期重疊,如果第二端部之前,首先開始與所述第一啓動之後的第一端。這似乎是你想要的邏輯。

你也應該小心$car_category_id_list。您無法將該列表作爲參數傳入。

+0

你爲什麼改變參數位置? –

+0

'第二次啓動後' – Strawberry

+0

@chiragpatel。 。 。所以邏輯是正確的。我相信我在答案中解釋了這一點。 –

-1

只需試試這個!

SELECT * FROM表名WHERE BETWEEN columname '2012-12-25 00:00:00' 和 '23:59:59 2012-12-25'

記錄[之間] 來源:「 2012-12-25 00:00:00' 收件人:'2012-12-25 23:59:59'