Maddesi göz ardı ediliyor ARASINDA Mysql.

2 Cevap php

im iki ayrı tarih sütunları (başlangıç ​​ve bitiş tarihleri) arasında rezervasyonu öğeleri göstermek için çalışıyor. i tarihleri ​​arasında aramak istiyorum ama sorgu Seçilen tarihler arasında arazi herhangi bir tarih göz ardı gibi görünüyor.

SELECT
bookings.booking_id,
bookings.booking_id,
bookings.booked_from,
bookings.booked_from,
bookings.booked_till,
item_set_computer.item_id,
item_set_computer.name,
item_set_computer.booking_groups_id
FROM
bookings,
item_set_computer
WHERE
item_set_computer.item_id = bookings.item_id
AND
item_set_computer.booking_groups_id = 3
AND
booked_from
BETWEEN "2010-04-13" AND "2010-04-20"
AND
booked_till
BETWEEN "2010-04-13" AND "2010-04-20"

Örneğin, ben 13 den 15 için rezervasyonu bir öğe var. date1 2010-04-13 ve date2 2010-04-15 olduğunu. 14 den 16 rezervasyonu öğeler için kullanıcı arar. Bu sonucu döndürür. Neden kullanıcı tarafından seçilen tarihler arasında açılan veritabanı tarihleri ​​göz ardı edilir? Sütunları veritabanında tarih olarak ayarlanır ve doğru girildi.

2 Cevap

Sen "14 den 16 rezervasyonu öğeler için kullanıcı arar" dedi.

Bu sorgu olacak demektir

AND
booked_from
BETWEEN "2010-04-14" AND "2010-04-16"
AND
booked_till
BETWEEN "2010-04-14" AND "2010-04-16"

(Lütfen, 4/13 başlangıç ​​tarihi 4/14, 4/16 arasında gerçekten DEĞİLDİR beri) ilk VE fıkra açıkça yanlış olacaktır

(Eğer TAM rezervasyon aralığını istediğiniz varsayarak) sizin için doğru mantık

AND booked_from >= "2010-04-14" 
AND booked_till <= "2010-04-16" 

Yoksa kısmi aralığı isterseniz

AND booked_from >= "2010-04-16" -- means we booked before the end of interval
AND booked_till <= "2010-04-14" -- means we left after the start 

maddesi altında kalan her iki tabloda aynı kimliğe sahip recordsets var? Ayrıca, WHERE col BETWEEN a AND b ile a b çalışması daha küçük olmak zorunda olduğundan emin olun.

Eğer son 6 satırları ne olur geri alır?