Postingan lainnya
Buku Ini Koding!
Baru!
Buku ini akan jadi teman perjalanan kamu belajar sampai dapat kerjaan di dunia programming!
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
2 Jawaban:
<div>Coba ganti :</div><pre>$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);</pre><div><br>Menjadi :</div><pre>$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);</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>
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->table($table) ->select('*') ->where("tanggal_mulai BETWEEN '$tgl1' AND '$tgl2'") ->orWhere("tanggal_selesai BETWEEN '$tgl1' AND '$tgl2'") //jika data kosong maka return true return (bool) ($row->get()->getRow() === null);</pre>