0

同様の質問を見つけようとしましたが、正確な質問が見つからなかったので、投稿します。

私は2つのテーブルを持っています:

  • 部屋(room_id)
  • room_reservation(room_id、date)

2つの日付の間に少なくとも1日空いている部屋のリストを返すにはどうすればよいですか。

たとえば、私がそれらの部屋を持っている場合:

room_id 1、2、3

次に、room_reservationテーブルに、次のものがあります。

1 - 2012-07-22
1 - 2012-07-23
1 - 2012-07-24
1 - 2012-07-25
1 - 2012-07-26
2 - 2012-07-23
2 - 2012-07-24

次に、2012-07-22と2012-07-26の間に利用可能な部屋を検索すると、部屋#2と#3のみが返されます。

私はこれまでこのクエリを持っていますが、機能しませんでした...助けてください!

SELECT DISTINCT room_id AS id
FROM room
WHERE (SELECT COUNT('listing') FROM listing_calendar WHERE listing = l.listing_id AND date BETWEEN '2012-07-22' AND '2012-07-26' GROUP BY listing) < 5"

助けてくれてありがとう!

4

1 に答える 1

1

このソリューションを使用できます:

SELECT    a.room_id
FROM      rooms a
LEFT JOIN room_reservations b ON 
          a.room_id = b.room_id AND
          b.date BETWEEN '2012-07-22' AND '2012-07-26'
GROUP BY  a.room_id
HAVING    COUNT(b.room_id) < DATEDIFF('2012-07-26', '2012-07-22') + 1

SQLFiddle デモ

于 2012-07-22T23:44:01.960 に答える