Postingan lainnya
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>