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

Bantuan dengan kueri SQL untuk menemukan tanggal berikutnya yang tersedia untuk sistem reservasi

Berikut ini harus membuat Anda pergi. Anda mungkin ingin menyesuaikan contoh fungsi "Current_Date()" saya untuk apa pun tanggal mulai dan tanggal mulai reservasi Anda....

Ini menggunakan variabel sebaris MySQL dalam kueri. Kueri dalam adalah persiapan sederhana dari variabel reservasi (@r) berdasarkan beberapa tanggal mulai ( current_date() ), dan bergabung ke tabel item. Dengan tidak melakukan klausa bergabung, itu akan mengambil satu tanggal untuk setiap item. Dalam skenario saya, saya hanya mempertimbangkan untuk keluar 30 hari, jadi saya telah menerapkan batas 30 item pertama. Tidak ada dasar selain memberi saya cukup catatan sehingga saya tidak perlu membuat tabel sementara berisi 30 catatan (atau berapa hari pun Anda ingin keluar). Ini membuat kueri alias "JustDates" dan memiliki satu kolom "OpenDate". Ini adalah dasar dari rentang tanggal yang akan diuji.

Ini sekarang digabungkan ke tabel item, tetapi tidak ada kondisi yang membuat Cartesian mengatakan untuk setiap tanggal, bandingkan dengan setiap item ... per klausa WHERE, saya hanya peduli dengan item yang memiliki SKU "ABC123" cuaca mereka memiliki 10 seri #s atau 100. Ini sekarang akan memberi saya kemungkinan 300 atau 3000 (10 item serial @ 30 hari, atau 100 item serial @ 30 hari.

Sekarang saya memiliki "rentang" dari semua nomor seri individu dan kemungkinan hari untuk memeriksa ketersediaan, sekarang saya dapat menanyakan sistem reservasi. Jadi, melalui sub-pilihan, dan NOT IN untuk SKU yang cocok, SERIAL #, dan Tanggal MUNGKIN ditemukan dalam reservasi, saya hanya ingin menyimpannya di mana OpenDate yang diberikan TIDAK ditemukan. Saya telah mensimulasikan struktur tabel Anda dan memasukkan beberapa item, beberapa nomor seri, dan rentang tanggal reservasi, dan ini berfungsi dengan baik...

Jelas, saya akan memastikan indeks pada sku / serial untuk kinerja. Satu-satunya perubahan tambahan yang mungkin saya buat adalah saat menanyakan reservasi, untuk mengecualikan reservasi di mana tanggal akhir sebelum tanggal mulai yang dipermasalahkan untuk permintaan ANDA, dan opsional, tidak ada Tanggal Mulai> tanggal TERAKHIR yang Anda pertimbangkan. Jika Anda memiliki banyak reservasi selama bertahun-tahun, siapa yang peduli dengan sesuatu yang kuno, atau sesuatu yang jauh di masa depan dari rentang tanggal yang dimaksud.

select  items.sku,
        items.serial_number,
        JustDates.OpenDate
    from 
        ( SELECT 
                 @r:= date_add(@r, interval 1 day ) OpenDate
            FROM 
                 (select @r := current_date()) vars,
                items limit 30 ) JustDates,
        items
    where 
            sku = "ABC123"
        and sku not in ( select sku from Reservations
                            where items.sku = reservations.sku
                              and items.serial_number = reservations.serial_number
                              and justDates.OpenDate >= reservations.start_date
                              and justDates.OpenDate <= reservations.end_date )
    order by 
       items.serial_number,
       justDates.OpenDate


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memperbaiki celah di id baris tabel mysql setelah kami menghapus beberapa di antaranya

  2. Laravel Fasih KIRI GABUNG WHERE NULL

  3. Referensi Kunci Asing MySQL

  4. Bagaimana cara melakukan pencocokan fuzzy nama perusahaan di MYSQL dengan PHP untuk pelengkapan otomatis?

  5. Apa kelebihan dan kekurangan menyimpan file dalam database?