Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pilih kamar yang tersedia antara dua tanggal

Sulit untuk memberikan jawaban lengkap untuk Anda di sini, karena Anda hanya menunjukkan kepada kami tabel yang berisi pemesanan - kami tidak dapat mengetahui kisaran kamar yang tersedia.

SQL yang mengembalikan room_id untuk kamar yang dipesan setidaknya sebagian dari periode yang dipilih dapat berupa:

SELECT `room_id` , COUNT(*)
FROM `bookings`
WHERE `dt` BETWEEN "[start date]" AND "[end date]"
GROUP BY `room_id`;

Jika Anda memiliki tabel kamar (bukan pemesanan), Anda dapat mengembalikan daftar kamar yang tidak dipesan selama periode tersebut dengan:

SELECT `id`
FROM `rooms`
WHERE `id` NOT IN (
  SELECT DISTINCT( `room_id` )
  FROM `bookings`
  WHERE `dt` BETWEEN "[start date]" AND "[end date]"
);

PERUBAHAN

Berdasarkan masukan dari OP, asumsinya sekarang adalah:

  • Tabel berisi rincian kamar yang tersedia untuk periode yang dimulai pada tanggal di kolom dt dan berakhir pada hari berikutnya (yaitu kamar hotel)
  • Kueri harus mengembalikan semua kamar yang tersedia selama periode yang dimasukkan (jadi hanya kamar yang tersedia dari HARI A sampai HARI B yang akan dikembalikan.

Dengan demikian, kode yang diubah adalah:

SELECT room_id
FROM available_rooms
WHERE dt BETWEEN "[start date]" AND DATE_SUB("[end date]",INTERVAL 1 DAY)
GROUP BY room_id
HAVING COUNT(*)=ABS(DATEDIFF("[start date]","[end date]"));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. gabung kanan versus gabung kiri

  2. Cara Membuat Tabel di MySQL

  3. Upaya tidak valid untuk Membaca saat pembaca ditutup

  4. Menggunakan MySQL dengan Layanan Heterogen Oracle

  5. Tidak dapat menemukan input type=image value di $_POST