Sintaks SQL tampikan data untuk memvalidasi event yang bentrok

saya ingin membuat validasi input tanggal acara yang dimana membutuhkan 2 inputan yaitu tgl1 dan tgl2

contoh kasusnya saya punya data didatabase :

image.png

ini query yang sudah saya buat menggunakan php CI 4

$row = $db->table($table)
            ->select('*')
            ->where('tanggal_mulai >=', $tgl1)
            ->where('tanggal_selesai <=', $tgl2);
//jika data kosong maka return true
return (bool) ($row->get()->getRow() === null);

masalahnya code diatas masih belum bekerja dengan baik yang dimana jika user menginput data :

//kasus 1
$tgl1 = '2020-03-10'
$tgl2 = '2020-03-26'
//hasilnya return false (validasi benar)
kasus 2
$tgl1 = '2020-03-11'
$tgl2 = '2020-03-17'
//hasilnya return true (validasi salah)
//kasus 3
$tgl1 = '2020-03-10'
$tgl2 = '2020-03-14'
//hasilnya return true (validasi salah)

seharusnya diantara 3 kasus tersebut semuanya return false dikarenakan didalam periode tgl1 dan tgl2 yang dibuat sudah ada acara yang akan berlangsung yaitu 2020-03-10 sampai 2020-03-15

bagaimana ya query sql untuk mengatasi tanggal yang dibuat user agar tidak bentrok dengan periode tanggal yang ada didatabase ?

mohon bantuannya

avatar Terra
@Terra

81 Kontribusi 39 Poin

Diperbarui 3 tahun yang lalu

2 Jawaban:

<div>Coba ganti :</div><pre>$row = $db-&gt;table($table) -&gt;select('') -&gt;where('tanggal_mulai &gt;=', $tgl1) -&gt;where('tanggal_selesai &lt;=', $tgl2); //jika data kosong maka return true return (bool) ($row-&gt;get()-&gt;getRow() === null);</pre><div><br>Menjadi :</div><pre>$row = $db-&gt;table($table) -&gt;select('') -&gt;where('tanggal_mulai &gt;=', $tgl1) -&gt;where('tanggal_selesai &gt;=', $tgl2); //jika data kosong maka return true return (bool) ($row-&gt;get()-&gt;getRow() === null);</pre><div><br>Jika tanggal yang dibuat user ingin<br>setelah periode tanggal yang ada didatabase,<br>cara di atas mungkin sesuai keinginan anda.<br><br>Semoga membantu</div>

avatar syahid246
@syahid246

70 Kontribusi 160 Poin

Dipost 3 tahun yang lalu

Tanggapan

makasih bantuannya, tapi caranya masih tidak bisa digunakan

Jawaban Terpilih

<div>sudah ketemu solusinya dengan cara menggunakan between dan OR pada query nya<br><br></div><pre>$row = $db-&gt;table($table) -&gt;select('*') -&gt;where("tanggal_mulai BETWEEN '$tgl1' AND '$tgl2'") -&gt;orWhere("tanggal_selesai BETWEEN '$tgl1' AND '$tgl2'") //jika data kosong maka return true return (bool) ($row-&gt;get()-&gt;getRow() === null);</pre>

avatar Terra
@Terra

81 Kontribusi 39 Poin

Dipost 3 tahun yang lalu

Login untuk ikut Jawaban