MySQL sorgusu TARİH karşılaştırması

3 Cevap php

Ben sorgu ile ilgili bir sorun var. Onun bana doğru sonucu veren bazı durumlarda ve bazı öyle değil, bu yüzden kimse ben süredir onunla şaşırıp ne şaşırtıcı neden olurdu değiştirmek için bana söyleyebilirdi. İşte benim masa veriler:

Tablo reservation_logs:

log_id      int(15) auto_increment   Primary   Unique  
room_log    int(10) 	 	
dt_from     date    		 	
dt_until    date

Tablo daireler:

apartman_id     int(10) auto_increment   Primary   Unique   
apartman_name   int(10)

Tarih Benim php kodu:

$date_from = 'text input date';
$date_until = 'text input date';

$myquery = ("SELECT * FROM reservation_logs WHERE room_log = '$apartman_id'  
AND(((dt_from >= '$date_from' AND dt_from <= '$date_until') 
AND (dt_until >= '$date_until' OR dt_until <= '$date_until')))");

Şimdi giriş I doğru almalısınız bazı tarihler apartman_id, ya da meşgul değilse. İşte bu çalışırken durum: $date_from ayda 1 güne eşittir ve $date_until, bir ay içinde son günü eşit olduğunda. Ben tarihleri ​​seçerseniz Ama örneğin $date_from ayın 16 eşittir ve $date_until 19. Diyelim kadar oda ayın 15'inden itibaren meşgul ise ben yanlış sonuçlar elde ayın 17. eşittir. Ben bunun arkasında bir fikir almak için çok fazla ben sadece daha fazla insan için istediği karmaşık vermedi umuyoruz.

3 Cevap

Yani onlar sadece bu tarih aralığı üst üste bile, $ date_from $ ve date_until arasında rezervasyon bulmak istiyorsunuz? Gibi sadece bu yeterli olmalı gibi bir şey ...

SELECT * FROM reservation_logs WHERE room_log = '$apartman_id'  
AND dt_from <= $date_until 
AND dt_until >= $date_from ;

Bu sadece after tarih aralığı, ve before tarih aralığını bitirir herhangi bir rezervasyon başlayan herhangi bir rezervasyon dışlar. Kalan şey tarih aralığında veya örtüşen olmalıdır.

dt_until >= '$date_until' OR dt_until <= '$date_until'

Her zaman doğru olacaktır ...

dt_from >= '$date_from' AND dt_from <= '$date_until'

... Ve bu sadece doğruysa $date_from = $date_until.