Postingan lainnya
Memunculkan data berdasarkan tahun dan bulan dengan join
Assalamualaikum,
Maaf temen-temen saya ada kendala, mungkin disini ada yang sudah ahlinya... Nama Tabel : 1. tb_pasien_data_rawat_inap
CREATE TABLE `tb_pasien_data_rawat_inap` (
`id_pasien` varchar(30) NOT NULL,
`ke` int(10) NOT NULL DEFAULT '0',
`id_unik` varchar(50) DEFAULT NULL,
`diagnosis` varchar(250) DEFAULT NULL,
`cara_datang` varchar(50) DEFAULT NULL,
`asuransi` varchar(35) DEFAULT NULL,
`id_ruangan` int(5) NOT NULL DEFAULT '0',
`alergi` varchar(1) NOT NULL DEFAULT 'N',
`jatuh` varchar(1) NOT NULL DEFAULT 'N',
`hiv` varchar(1) NOT NULL DEFAULT 'N',
`dnr` varchar(1) NOT NULL DEFAULT 'N',
`tgl_masuk` datetime DEFAULT NULL,
`tgl_keluar` datetime DEFAULT NULL,
`tgl_edit` datetime DEFAULT NULL,
`masuk_oleh` varchar(50) NOT NULL,
`keluar_oleh` varchar(50) DEFAULT NULL,
`edit_oleh` varchar(50) DEFAULT NULL,
`cara` varchar(1) DEFAULT NULL,
`dokter` varchar(100) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
2. tb_laporan_kaji_harian
CREATE TABLE `tb_laporan_kaji_harian` (
`ID` bigint(11) NOT NULL,
`id_pasien` varchar(65) NOT NULL,
`ke` int(11) NOT NULL,
`nyeri` int(11) DEFAULT NULL,
`jatuh` int(11) DEFAULT NULL,
`dekubitus` int(11) DEFAULT NULL,
`nilai_budaya` int(11) DEFAULT NULL,
`sosial` int(11) DEFAULT NULL,
`spiritual` int(11) DEFAULT NULL,
`psikologi` int(11) DEFAULT NULL,
`disscharge_planning` int(11) DEFAULT NULL,
`riwayat_alergi` int(11) DEFAULT NULL,
`edukasi_terintegrasi` int(11) DEFAULT NULL,
`skrining_gizi` int(11) DEFAULT NULL,
`kajian_status` int(11) DEFAULT NULL,
`waktu_pengkajian` datetime DEFAULT NULL,
`masuk_oleh` varchar(75) DEFAULT NULL,
`id_ruangan` int(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Saya ada dua table yang saling berhubungan datanya dan saya ingin menampilkdan datanya berdasarkan tahun,bulan dengan metode pemilihan pada form input tanggal, nah pas saya sudah selesai buat kode nya, yang muncul hanya pada bulan yang datanya terisi saja di bulan februari padahal saya ingin menampilkan datanya keseluruhan walaupun pada bulan janurai bernilai kosong dan maret bernilai kosong...
Berikut kode yang saya buat :
SELECT YEAR(a.tgl_masuk) as tahun, MONTH(a.tgl_masuk) as bulan, SUM(c.nyeri) as nyeri, SUM(c.jatuh) as jatuh , SUM(c.dekubitus) as dekubitus, SUM(c.nilai_budaya) as nilai_budaya, SUM(c.sosial) as sosial, SUM(c.spiritual) as spiritual, SUM(c.psikologi) as psikologi, SUM(c.disscharge_planning) disscharge_planning, SUM(c.riwayat_alergi) as riwayat_alergi, SUM(c.edukasi_terintegrasi) as edukasi_terintegrasi, SUM(c.skrining_gizi) as skrining_gizi, SUM(c.kajian_status) as kajian_status, (SELECT COUNT(id_pasien) FROM tb_pasien_data_rawat_inap as t WHERE DATE(t.tgl_masuk) >= '2018-02-01' and DATE(t.tgl_masuk) <= '2018-03-03' and t.id_ruangan!=100 and t.id_ruangan!=981 and t.id_ruangan!=0) as standar FROM tb_pasien_data_rawat_inap as a INNER JOIN tb_pasien as b ON a.id_pasien = b.id_pasien LEFT JOIN tb_laporan_kaji_harian as c ON a.id_pasien=c.id_pasien WHERE DATE(a.tgl_masuk) >= '2018-1-1' and DATE(a.tgl_masuk) <= '2018-3-31' and c.id_ruangan!=981 and c.id_ruangan!=100 and c.id_ruangan!=0 GROUP BY tahun, bulan ORDER by tahun ASC, bulan ASC, a.id_ruangan ASC, c.masuk_oleh ASC
Dan berikut penampakan hasil dari script kode diatas ketika di jalankan :
Array
(
[0] => Array
(
[tahun] => 2018
[bulan] => 2
[id_ruangan] => 929
[nyeri] => 308
[jatuh] => 307
[dekubitus] => 213
[nilai_budaya] => 298
[sosial] => 301
[spiritual] => 300
[psikologi] => 304
[disscharge_planning] => 295
[riwayat_alergi] => 306
[edukasi_terintegrasi] => 294
[skrining_gizi] => 213
[kajian_status] => 227
[masuk_oleh] => 145993364066568800
)
)
Hasil yang dinginkan seperti ini :
Array
(
[0] => Array
(
[tahun] => 2018
[bulan] => 1
[nyeri] => 0
[jatuh] => 0
[dekubitus] => 0
[nilai_budaya] => 0
[sosial] => 0
[spiritual] => 0
[psikologi] => 0
[disscharge_planning] => 0
[riwayat_alergi] => 0
[edukasi_terintegrasi] => 0
[skrining_gizi] => 0
[kajian_status] => 0
)
[1] => Array
(
[tahun] => 2018
[bulan] => 2
[nyeri] => 308
[jatuh] => 307
[dekubitus] => 213
[nilai_budaya] => 298
[sosial] => 301
[spiritual] => 300
[psikologi] => 304
[disscharge_planning] => 295
[riwayat_alergi] => 306
[edukasi_terintegrasi] => 294
[skrining_gizi] => 213
[kajian_status] => 227
)
[2] => Array
(
[tahun] => 2018
[bulan] => 3
[nyeri] => 0
[jatuh] => 0
[dekubitus] => 0
[nilai_budaya] => 0
[sosial] => 0
[spiritual] => 0
[psikologi] => 0
[disscharge_planning] => 0
[riwayat_alergi] => 0
[edukasi_terintegrasi] => 0
[skrining_gizi] => 0
[kajian_status] => 0
)
)
Berikut link tabel database yang saya gunakan jika ada yang ingin membantu, untuk di uji coba...
<a href=' https://drive.google.com/drive/folders/1SCxyyUzuv5V8FQy6FaYb7DRmZipDVVcS?usp=sharing '> https://drive.google.com/drive/folders/1SCxyyUzuv5V8FQy6FaYb7DRmZipDVVcS?usp=sharing </a>
15 Jawaban:
kalau memang kosong apa yang mau ditampilkan? coba yang where tgl_masuk dibuat between saja & buat kondisi kalau misal data kosongnya..
Soalnya nilai standar jumlah pasien pada setiap bulan itu pasti ada, hanya saja data yang di joinkan pada tabel 2 itu gak mesti ada... Nah saya tetap ingin tampilkan nilai standar pada setiap bulanya walalupun pada tabel yang 2 dalam keadaan kososng...
Berarti gak jadi pakai id ruangan mas ? hasil yang di mau bener kaya gitu mas ? Januari sama maret semua nilainya 0 ?
Mungkin gini ya mas
Iya nggak jadi pake id_ruangan mas, iya keluarnya seperti itu mas, tapi data pada tahun 2018 bulan 01 itu seharusnya semuanya nilainya 0, soalnya datanya di tabel tb_laporan_kaji_harian dimulai dari tahun 2018 bulan 02 tanggal 5
saran gan, defaultnya ganti ke 0 saja
CREATE TABLE `tb_laporan_kaji_harian` (
`ID` bigint(11) NOT NULL,
`id_pasien` varchar(65) NOT NULL,
`ke` int(11) NOT NULL,
`nyeri` int(11) DEFAULT 0,
`jatuh` int(11) DEFAULT 0,
`dekubitus` int(11) DEFAULT 0,
`nilai_budaya` int(11) DEFAULT 0,
`sosial` int(11) DEFAULT 0,
`spiritual` int(11) DEFAULT 0,
`psikologi` int(11) DEFAULT 0,
`disscharge_planning` int(11) DEFAULT 0,
`riwayat_alergi` int(11) DEFAULT 0,
`edukasi_terintegrasi` int(11) DEFAULT 0,
`skrining_gizi` int(11) DEFAULT 0,
`kajian_status` int(11) DEFAULT 0,
`waktu_pengkajian` datetime DEFAULT 0,
`masuk_oleh` varchar(75) DEFAULT 0,
`id_ruangan` int(5) DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Baik mas terima kasih atas masukannya... Ini masih belum ketemu untuk sampai kepada hasil yg diinginkan... Mungkin ada master-master yang mau bantu?...
coba pake ini gan
SELECT YEAR(a.tgl_masuk) as tahun,
MONTH(a.tgl_masuk) as bulan,
IFNULL(SUM(c.nyeri),0) as nyeri,
IFNULL(SUM(c.jatuh),0) as jatuh ,
IFNULL(SUM(c.dekubitus),0) as dekubitus,
IFNULL(SUM(c.nilai_budaya),0) as nilai_budaya,
IFNULL(SUM(c.sosial),0) as sosial,
IFNULL(SUM(c.spiritual),0) as spiritual,
IFNULL(SUM(c.psikologi),0) as psikologi,
IFNULL(SUM(c.disscharge_planning) disscharge_planning,
IFNULL(SUM(c.riwayat_alergi),0) as riwayat_alergi,
IFNULL(SUM(c.edukasi_terintegrasi),0) as edukasi_terintegrasi,
IFNULL(SUM(c.skrining_gizi),0) as skrining_gizi,
IFNULL(SUM(c.kajian_status),0) as kajian_status,
FROM tb_pasien_data_rawat_inap as a INNER JOIN tb_pasien as b ON a.id_pasien = b.id_pasien LEFT JOIN tb_laporan_kaji_harian as c ON a.id_pasien=c.id_pasien
WHERE DATE(a.tgl_masuk) >= '2018-1-1' and DATE(a.tgl_masuk) <= '2018-3-31' and c.id_ruangan!=981 and c.id_ruangan!=100 and c.id_ruangan!=0 GROUP BY tahun, bulan ORDER by tahun ASC, bulan ASC, a.id_ruangan ASC, c.masuk_oleh ASC
Terimakasih banyak, kepada temen-temen yang sudah ikut bantu jawab... Untuk bang @dianarifr kodenya sudah saya coba hanya saja, masih belum sampai kepada yang diharapkan... Saya banyak-banyak berterimakasih sama temen-temen semua disini atas bantuanya...
ada yang kurang, silahkan dicoba
SELECT YEAR(a.tgl_masuk) as tahun,
MONTH(a.tgl_masuk) as bulan,
IFNULL(SUM(c.nyeri),0) as nyeri,
IFNULL(SUM(c.jatuh),0) as jatuh ,
IFNULL(SUM(c.dekubitus),0) as dekubitus,
IFNULL(SUM(c.nilai_budaya),0) as nilai_budaya,
IFNULL(SUM(c.sosial),0) as sosial,
IFNULL(SUM(c.spiritual),0) as spiritual,
IFNULL(SUM(c.psikologi),0) as psikologi,
IFNULL(SUM(c.disscharge_planning),0) as disscharge_planning,
IFNULL(SUM(c.riwayat_alergi),0) as riwayat_alergi,
IFNULL(SUM(c.edukasi_terintegrasi),0) as edukasi_terintegrasi,
IFNULL(SUM(c.skrining_gizi),0) as skrining_gizi,
IFNULL(SUM(c.kajian_status),0) as kajian_status
FROM tb_pasien_data_rawat_inap as a
INNER JOIN tb_pasien as b ON a.id_pasien = b.id_pasien
LEFT JOIN tb_laporan_kaji_harian as c ON a.id_pasien=c.id_pasien
WHERE DATE(a.tgl_masuk) >= '2018-1-1' and DATE(a.tgl_masuk) <= '2018-3-31'
and c.id_ruangan!=981 and c.id_ruangan!=100 and c.id_ruangan!=0
GROUP BY tahun, bulan
ORDER by tahun ASC, bulan ASC, a.id_ruangan ASC, c.masuk_oleh ASC
Dari banyak metode yang temen-temen berikan ke saya, saya bersyukur sekali kepada Allah SWT dikarenakan jadi banyak tau metode-metode cara mengambil data dari database... Saya banyak berterima kasih kepada semuanya yang terlibat dari diskusi ini, semoga kalian selalu mendapatkan segala kebaikan dan diberikan keberkahan atas ilmu pemogramanya... Hasilnya seperti ini gan...
Hasil akhirnya masih belum seperti di bawah ini... Jadi kenapa pada tahun 2018 bulan 01 dan 03 kosong semua, karena data pada tabel tb_kaji_harian datanya baru ada dari tahun 2018 bulan 02... Sehingga bentuknya seperti ini, seharusnya... Array ( [0] => Array ( [tahun] => 2018 [bulan] => 1 [nyeri] => 0 [jatuh] => 0 [dekubitus] => 0 [nilai_budaya] => 0 [sosial] => 0 [spiritual] => 0 [psikologi] => 0 [disscharge_planning] => 0 [riwayat_alergi] => 0 [edukasi_terintegrasi] => 0 [skrining_gizi] => 0 [kajian_status] => 0 ) [1] => Array ( [tahun] => 2018 [bulan] => 2 [nyeri] => 308 [jatuh] => 307 [dekubitus] => 213 [nilai_budaya] => 298 [sosial] => 301 [spiritual] => 300 [psikologi] => 304 [disscharge_planning] => 295 [riwayat_alergi] => 306 [edukasi_terintegrasi] => 294 [skrining_gizi] => 213 [kajian_status] => 227 ) [2] => Array ( [tahun] => 2018 [bulan] => 3 [nyeri] => 0 [jatuh] => 0 [dekubitus] => 0 [nilai_budaya] => 0 [sosial] => 0 [spiritual] => 0 [psikologi] => 0 [disscharge_planning] => 0 [riwayat_alergi] => 0 [edukasi_terintegrasi] => 0 [skrining_gizi] => 0 [kajian_status] => 0 )
)
Setiap di join kan dua tabel itu pasti hasilnya di bulan februari tidak sesuai dengan hasil yang di harapkan, di bulan januari juga ada soalnya berdasarkan tanggal masuk si pasien dan ketika di tabel rawat inap dan kolom tgl_masuk ada idpasien dan tgl masuk yang di inginkan di where maka hasilnya akan keluar dan juga terjadi redudansi data yang sangat2 banyak ^^
Sebaiknya tabel2 yang ada di normalisasi lagi mas itu, soalnya ada banyak data yang seharusnya cukup satu dan di sana ada banyak banget yang sama
Betul sekali @markeronly, soalnya ini saya meneruskan design database orang pertama yang membuat... Itu sudah terlanjur banyak sekali datanya...
Terimakasih banyak ya, sudah meluangkan waktunya untuk membantu... Mohon maaf biar pertemananya semakin baik, boleh tau namanya siapa mas @markeronly?...
Alhamdulillah, sudah ketemu caranya, namun memang tidak bisa mengeluarkan data pada bulan maret saja dan tidak bisa diambil dengan satu query tapi di loop..
Berikut kodenya...
$dari = isset($_POST['dari'])? date('Y-m-d',strtotime($_POST['dari'])) : '2018-01-1';
$sampai = isset($_POST['sampai'])? date('Y-m-d',strtotime($_POST['sampai'])) : '2018-03-31';
$data_chart_2a = array();
$data_pasien = $Q->DBRecordList('tb_pasien_data_rawat_inap',
'
IFNULL(YEAR(tgl_masuk),YEAR(tgl_masuk)) as tahun ,
IFNULL(MONTH(tgl_masuk),MONTH(tgl_masuk)) as bulan,
IFNULL(id_pasien,0) as id_pasien,
IFNULL(ke,0) as ke,
IFNULL(COUNT(*),0) as standar
','
WHERE
DATE(tgl_masuk)>= \''.date('Y-m-d',strtotime($dari)).'\' and
DATE(tgl_masuk)<= \''.date('Y-m-d',strtotime($sampai)).'\' and
id_ruangan!=981 and
id_ruangan!=100 and
id_ruangan!=0
GROUP BY
tahun,
bulan
ORDER BY
tahun ASC,
bulan ASC');
$NamaKategori3 = array('standar'=>'Jumlah Pasien/Bulan','kajian_status'=>'Pengkajian <8 Jam','nyeri'=>'Nyeri','jatuh'=>'Jatuh','dekubitus'=>'Dekubitus','nilai_budaya'=>'Nilai Budaya','sosial'=>'Sosial','spiritual'=>'Spiritual','psikologi'=>'Psikologi','disscharge_planning'=>'Discharge Planing','riwayat_alergi'=>'Riwayat Alergi','edukasi_terintegrasi'=>'Edukasi Terintegrasi','skrining_gizi'=>'Skrining Gizi');
foreach ($data_pasien as $key => $value) {
$tb_kaji = $Q->DBRecordList('tb_laporan_kaji_harian as c',
'IFNULL(YEAR(c.waktu_pengkajian),\''.$value['tahun'].'\') as tahun,
IFNULL(MONTH(c.waktu_pengkajian),\''.$value['bulan'].'\') as bulan,
IFNULL(SUM(c.nyeri),0) as nyeri,
IFNULL(SUM(c.jatuh),0) as jatuh ,
IFNULL(SUM(c.dekubitus),0) as dekubitus,
IFNULL(SUM(c.nilai_budaya),0) as nilai_budaya,
IFNULL(SUM(c.sosial),0) as sosial,
IFNULL(SUM(c.spiritual),0) as spiritual,
IFNULL(SUM(c.psikologi),0) as psikologi,
IFNULL(SUM(c.disscharge_planning),0) disscharge_planning,
IFNULL(SUM(c.riwayat_alergi),0) as riwayat_alergi,
IFNULL(SUM(c.edukasi_terintegrasi),0) as edukasi_terintegrasi,
IFNULL(SUM(c.skrining_gizi),0) as skrining_gizi,
IFNULL(SUM(c.kajian_status),0) as kajian_status
',
'where
YEAR(c.waktu_pengkajian)=\''.$value['tahun'].'\' and
MONTH(c.waktu_pengkajian)>=\''.$value['bulan'].'\' and
MONTH(c.waktu_pengkajian)<=\''.$value['bulan'].'\'
ORDER BY
YEAR(c.waktu_pengkajian) ASC,
MONTH(c.waktu_pengkajian) ASC');
$data_chart_2a[] = '{name:"'.$value['tahun'].' - '.$_BULAN[$value['bulan']].'", data:['.$value['standar'].','.$tb_kaji[0]['kajian_status'].','.$tb_kaji[0]['nyeri'].','.$tb_kaji[0]['jatuh'].','.$tb_kaji[0]['dekubitus'].','.$tb_kaji[0]['nilai_budaya'].','.$tb_kaji[0]['sosial'].','.$tb_kaji[0]['spiritual'].','.$tb_kaji[0]['psikologi'].','.$tb_kaji[0]['disscharge_planning'].','.$tb_kaji[0]['riwayat_alergi'].','.$tb_kaji[0]['edukasi_terintegrasi'].','.$tb_kaji[0]['skrining_gizi'].']}';
}
Hasil Grafiknya seperti ini :
@irfanmyj oh pantesan mas udah terlanjur basah ya haha nama saya Agung mas ^^ salam kenal mas irfan. @dianarifr pasti berat banget mas wkwk mungkin cara untuk saat ini kaya gitu kali mas, nanti kan kedepan bisa di refactor lagi ituu *eh jadi kerja 2 x haha
Kalau datanya sudah banyak banget pasti berat, tapi terimakasih banyak atas bantuanya temen-temen semua disini... @dianarifr dan @markeronly atau Mas Agung...