Cara mencari rentang waktu_mulai dan waktu_akhir jika ditemukan pada rentang tersebut maka centang tanggal_mulai dan tanggal_akhir

Saya memiliki tabel di bawah ini di database.

    id | list_id |venue_id |name | start_date | end_date   |start_time | end_time 
    1  |       1 |  1      |asdf |  2019-02-02| 2019-02-28 |05:30      |10:00
    2  |       7 |  2      |awed |  2019-02-10| 2019-02-20 |07:30      |14:00
    3  |       7 |  1      |mjgd |  2019-02-04| 2019-02-13 |09:30      |18:00

Sekarang, saya harus mencari tanggal_mulai dan tanggal_akhir venue_id=1 antara rentang 2019-02-04 dan 2019-03-01. Jadi saya menggunakan kueri di bawah ini.

SELECT * FROM `batch_list` WHERE `venue_id` = 1 and ((start_date between '2019-02-04' and '2019-03-01') OR (end_date between '2019-02-04' and '2019-03-01'))

Sekarang saya harus mencari tanggal dan waktu venue_id=1 yang berkisar antara 2019-02-04 dan 2019-03-01 dan 05:00 hingga 18:00. Jadi saya mencoba kueri di bawah ini

SELECT * FROM `batch_list` WHERE `venue_id` = 1 and ((start_date between '2019-02-04' and '2019-03-01') OR (end_date between '2019-02-04' and '2019-03-01')) and((start_time <= `end_time`) and (`start_time` between '05:00' and '18:00')and (end_time between '05:00' and '18:00'))

Jadi tidak ada masalah sampai saat ini.

Saya memiliki waktu 05:00 hingga 20:00 maka saya mendapatkan semua catatan yang terkait dengan venue_id 1 tetapi jika saya mengubah waktu 10:00 menjadi 13:00 maka saya tidak mendapatkan catatannya.

Saya perlu mencari tahu apakah ada waktu_mulai dan waktu_akhir yang tersedia dalam rentang tersebut atau tidak. Jika ditemukan maka periksa tanggal_mulai dan tanggal_akhir.

Maukah Anda membantu saya dalam masalah ini?

Model

function fetchBatches($venue_id,$new_batch_start_date,$new_batch_end_date,$new_batch_start_time,$new_batch_end_time)
    {
$where="batch_venue_id='$venue_id' and ((start_date between '$new_batch_start_date' and '$new_batch_end_date')OR (end_date between '$new_batch_start_date' and '$new_batch_end_date')) and ((start_time<=end_time) and (start_time < '$new_batch_start_time' and start_time < '$new_batch_end_time'))";

        $result =$this->db->select('*')    
                    ->from('batch_list')
                    ->where($where)
                    ->get()
                    ->result();
            if ($result) {
                 return $result;
            }
            else{
                 return 0;
            }

    }

person user9437856    schedule 01.02.2019    source sumber
comment
Oh! Saya merindukan itu. Tunggu, saya memperbarui pertanyaannya. Yakni pukul 10.00 hingga 13.00. Pertanyaan yang diperbarui.   -  person user9437856    schedule 01.02.2019
comment
Anda dapat menyelamatkan diri Anda dari penderitaan dengan menyimpan tanggal dan waktu sebagai satu kesatuan   -  person Strawberry    schedule 01.02.2019
comment
Saya tidak mengerti - apakah Anda benar-benar ingin menemukan tumpang tindih dua interval waktu?   -  person splash58    schedule 01.02.2019
comment
@splash58, saya sudah memiliki catatan di tabel. Jika admin ingin membuat venue_id =1 record lagi maka terlebih dahulu akan dicek apakah start_time dan end_time tersedia atau tidak di record, jika record tersedia maka akan dicek tanggalnya   -  person user9437856    schedule 01.02.2019
comment
@splash58, Tujuan utama saya adalah, admin tidak dapat membuat catatan apa pun jika ditemukan rentang waktu dan tanggal apa pun. misalnya: venue_id=1 dipesan untuk tanggal 02-02-2019 hingga 28-02-2019 dan waktunya pukul 05:30 hingga 10:30. Jika admin mencoba membuat catatan apa pun pada id yang sama maka ia akan memeriksa waktu dan tanggal   -  person user9437856    schedule 01.02.2019
comment
Ya, Anda ingin memastikan bahwa interval waktu Anda tidak tumpang tindih dengan siapa pun di db. Ada banyak pertanyaan seperti itu di SO   -  person splash58    schedule 01.02.2019
comment
Jangan pisahkan tanggal dan waktu - pertanyaan Anda seharusnya - venue_id=1 dipesan untuk tanggal 2019-02-02 05:30 hingga 2019-02-28 10:30   -  person splash58    schedule 01.02.2019
comment
@splash58, Ya, saya sudah memeriksa SO, tapi itu hanya memeriksa waktu. Senario saya adalah jika menemukan waktu maka periksa juga tanggalnya   -  person user9437856    schedule 01.02.2019
comment
@splash58, saya memiliki kolom di mana admin dapat memasukkan waktu_mulai dan waktu_akhir.   -  person user9437856    schedule 01.02.2019
comment
Sayangnya, Anda tidak menyimpan bidang DateTime, dan Anda harus membuatnya dengan fungsi mysql   -  person splash58    schedule 01.02.2019
comment
Mari kita melanjutkan diskusi ini dalam chat.   -  person user9437856    schedule 01.02.2019


Jawaban (1)


Seperti yang disarankan beberapa orang, lebih baik menggabungkan tanggal dan waktu ke dalam database.

Untuk pertanyaan Anda, menurut saya pertanyaan yang Anda inginkan adalah yang ini:

SELECT * FROM batch_list 
WHERE    venue_id = 1
         AND (start_date <= '2019-03-01') 
         AND (start_time <= '13:00:00')
         AND (end_date >= '2019-02-04')
         AND (end_time >= '10:00:00')
person Dialex    schedule 01.02.2019
comment
Terima kasih atas jawabannya. Beri saya waktu untuk memeriksanya - person user9437856; 01.02.2019
comment
Perbarui jawaban saya, coba lagi dan beri tahu saya jika masih tidak berhasil - person Dialex; 05.02.2019
comment
Biarkan saya mencoba lagi. - person user9437856; 05.02.2019
comment
01-03-2019 adalah tanggal berakhir dan 13:00:00 adalah waktu berakhir... benar? - person user9437856; 05.02.2019
comment
Ya benar, ia memeriksa apakah ada pemesanan antara 04-02-2019 10:00 dan 03-01-2019 13:00 - person Dialex; 05.02.2019
comment
Saya punya sedikit kekhawatiran, jika venue_id lebih dari satu, lalu bagaimana cara memeriksanya? Maksud saya misalnya venue_id = 1,2 - person user9437856; 05.02.2019
comment
Tidak masalah, Anda dapat menambahkan ketentuan lain untuk tempat, seperti WHERE (venue_id = 1 OR venue_id = 2) AND ... - person Dialex; 05.02.2019
comment
sebelum beberapa hari saya mengganti tabel dan id venue, maksud saya sekarang saya mendapatkan id venue di kolom seperti 1,3,4.... Saya mendapatkan error unknown kolom '1,3,4' di 'where ayat'. haruskah saya menggunakan fungsi meledak untuk ini? - person user9437856; 05.02.2019
comment
Saya tidak mengerti. Apakah Anda mengubah struktur tabel dan venue_id menyimpan lebih dari satu id? - person Dialex; 05.02.2019
comment
Mari kita melanjutkan diskusi ini dalam chat. - person Dialex; 05.02.2019
comment
Saya mendapatkan masalah yang sama. Saya menggunakan jawaban Anda tetapi kali ini saya harus memeriksa hari-harinya. Bisakah Anda membantu saya dalam masalah ini stackoverflow.com/questions/54721274/ - person user9437856; 17.02.2019
comment
Saya kesulitan menemukan masalah ini sejak 8-9 hari terakhir..Tolong bantu saya dalam masalah ini..tolong tolong - person user9437856; 17.02.2019