2016-04-01 20 views
1

Bir rezervasyon sistemi oluşturmaya çalışıyorum ve iki tarih arasında bir rezervasyon yapılmış olup olmadığını kontrol etmek istiyorum. Ancak, SQL'im her zaman false döndürür.PHP SQL Tarihleri ​​arasında satır seçin

$reservation_date_start = date('y-m-d', strtotime($fields['reservation_date_start'])); 
$reservation_date_end = date('y-m-d', strtotime($fields['reservation_date_end'])); 

// Save data to database 
$table_name = $wpdb->prefix . 'mb_bookings'; 

$date_exists = $wpdb->get_results("SELECT * FROM $table_name 
WHERE (reservation_date_start >= $reservation_date_start AND reservation_date_start < $reservation_date_end) 
OR (reservation_date_end >= $reservation_date_start AND reservation_date_end < $reservation_date_end) 
AND (accommodation_id = $accommodation_id)" 
); 

Zaten aynı zamanda herhangi bir başarı olmadan, BETWEEN işlevini kullanarak denedim.

tarihleri ​​veritabanı (YAG) doğru

Db örnektir:

enter image description here

Herhangi bir yardım gerçekten takdir, ben şimdi gün boyunca onunla mücadele ettik ..

+0

Aldığınız hata nedir? Burada (a> b) veya (b> a), ek parantez ile ((a> b) veya (b> a)) olmalıdır. – Alex7

+0

"booking_date_start" ve "reservation_date_end" sütunlarının veri türü nedir? –

+0

@ Alex7 Sorun alıyorum her zaman 0 döndürür. Ekstra parantez eklemek istedim, ancak yine de başarı. – Thjeu

cevap

0

Tarih biçimi y-m-d, 16-04-01 gösterir. 2016-04-01 almak için Y-m-d olarak değiştirin. Sorgu o zaman çalışmalıdır.

Gereksinimlerinizi doğru anlıyorsam, iki periyodun örtüşüp örtüşmediğini kontrol etmek istersiniz. $ Tablo_ismi NEREDEN

SELECT * 
FROM $table_name 
WHERE 
     STR_TO_DATE('$reservation_date_end', '%Y-%m-%d') >= reservation_date_start 
    AND STR_TO_DATE('$reservation_date_start', '%Y-%m-%d') <= reservation_date_end 
    AND accommodation_id = $accommodation_id 
+0

Maalesef herhangi bir etkisi olmadı. $ Date_exists sorgusu hala 0 değerini döndürür. – Thjeu

+0

Gerçekten çok çok teşekkürler! Sen çözümün sonunda çalışıyorsun! Çözümünüzü anlamaya çalıştığım için bu, mySQL'in PHP Tarih değerlerini okuyamadığı anlamına mı geliyor? Ve bunun için STR_TO_DATE işlevinin olması gerekiyor mu? – Thjeu

+0

@Thjeu Bilmiyorum. Ben gerçekten mySQL kullanıcısı değilim, bu durumda sadece STR_TO_DATE ekledim. PostgreSQL'de sadece '2016-04-01' dizesiyle çalışırdı. – Furgas

0
$reservation_date_start = date('Y-m-d',strtotime($fields['reservation_date_start'])); 
$reservation_date_end = date('Y-m-d', strtotime($fields['reservation_date_end'])); 
+0

Maalesef herhangi bir etkisi olmadı. $ Date_exists sorgusu hala 0 değerini döndürür. – Thjeu

0

SELECT *:

SELECT * 
FROM $table_name 
WHERE 
(
    (
    STR_TO_DATE('$reservation_date_start', '%Y-%m-%d') <= reservation_date_end 
    AND 
    STR_TO_DATE('$reservation_date_end', '%Y-%m-%d') > reservation_date_start 
    ) 
OR 
    (
    STR_TO_DATE('$reservation_date_end', '%Y-%m-%d') >= reservation_date_start 
    AND 
    STR_TO_DATE('$reservation_date_start', '%Y-%m-%d') < reservation_date_end 
    ) 
) 
AND (accommodation_id = $accommodation_id) 

DÜZENLEME örtüşen için

Basitleştirilmiş durumu: Bunu o (işareti eklendi parnetheses ve kesme) yapmak gerektiğini düşünüyorum date_filed BEDAVA booking_date_start VE $ booking_date_end;

+0

Ben senin çözümünüzü anlamıyorum, bu yüzden yanılıyorsam lütfen beni düzeltin. Ama 'date_filed' diye bir sütun yok, bu yüzden bunun nasıl olacağını göremiyorum. – Thjeu

İlgili konular