Tolong pilih kategori sesuai, jenis posting (diskusi atau bukan) dan sertakan tag/topik yang sesuai seperti komputer, java, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus!
- Bagi Anda yang ingin mendaftar, baca link berikut:
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

master,bagai mana cara membuat horizontal table record dari looping data baris dan kolom didalamnya

ditengah pembuatan website sistem absensi sekolah, baru saja saya dapat kasus yang diluar jangkawan pengetahuan saya..
hehehe
berkenaan saya masih pemula dalam dunia webprogramming..
saya dengan sangat minta bantuan para master-master yang ada di webforum ini.. 
saya menyertakan source websitenya juga kok.
ini: https://docs.google.com/file/d/0B57HzwXdIFBFXzF6VjNMdTQzdVU/edit
 
screenshot websitenya:
#login
image

#jadwal mengajar (setelah memasuki jam mangejar pilih kelas untuk melakukan absen)
image

#input absensi:
image

#Laporan Bulanan
image

Permasalahan:
bagaimana cara report bulanan absensi dapat tampil layaknya horizontal table yang ada di excel..dimana data absen terlampir dalam periode bulanan, dengan berurutan horizontal dari tanggal 1-30,sedangkan baris tersusun vertikal berisi nama-nama murid.
tolong pencerahannya master.

Comments

  • lalu masalahnya apa ?
  • jd awalnya saya sedang magang disekolah swasta, dan saya diminta untuk membuat website yang berfungsi sebagai sistem absensi sekolah.
    ----------------------------------------------------------------------------------------------------------------------------------------------------------
    proses dan fungsi website yang diharapkan:1. pada saat guru login, dia langsung dapat melihat jadwal mengajar mereka dihari itu.*ket: jadwal mengajar difilter berdasarkan hari 
    2. kemudian jadwal mengajar yang terlampir pada hari itu dapat diklik untuk melakukan absensi harian rombel(rombongan mengajar contoh:kelas 8 1) didalamnya.
    *ket: proses ini dilakukan tiap hari dan tersimpan di table absen
    3. yang pada akhirnya guru dapat melihat report bulanan absensi setiap rombel(rombongan mengajar contoh:kelas 8 1) didalam website ini.
    -----------------------------------------------------------------------------------------------------------------------------------------------------------Permasalahan 1:kemudian ditengah pengerjaan website ini saya diminta oleh para guru untuk membuatkan report bulanan absensi dapat tampil layaknya horizontal table yang ada di excel..dimana data absen terlampir dalam periode bulanan, dengan berurutan horizontal dari tanggal 1-30,sedangkan baris tersusun vertikal berisi nama-nama murid.
    sampai saat ini saya hanya berasil membuat report bulanan absensi dengan bentuk yang sama.akan tetapi fungsi dan strukturnya tidak sesuai.saya hanya mampu melakukan 2 looping record data biasa.. tanpa susunan yang berurutan berdasarkan tanggal.
    dan inti permasalahannya mungkin karena ilmu saya yang belum cukup master..hehehe
    ^_^

    berkali-kali saya coba mencari tutorial yang memiliki contoh kasus yang setidaknya serupapun, sampai detik ini saya belum dapat juga.
    padahal saya sudah mencari lebih dari 2 bulan di bah google loh..

    tolong ya master, untuk dapat mengshare pengalaman dan ilmunya..
    jika ada waktu silahkan download web source saya untuk mencoba dan menganalisi permasalahan yang saya maksud..



  • edited August 2013
    report nya dalam bentuk apa ?
    hanya tampilan halaman web ?
    atau file yg bisa di download ?

    maksud elo, mau bikin gambar yg terakhir ?
    lha sudah jadi gitu lho ...
    gak sesuai dimananya ?

    query yg elo pake kaya apa ?
  • edited August 2013
    iya, hanya tampilan web dan seperti digambar yang terakhir..
    tp itu loopingan tidak berurut berdasarkan tanggal.

    karna query yang saya gunakan
    hanya melakukan perintah while biasa..

            
    <table width="1444" border="0" bgcolor="#CCCCCC">
      <tr bgcolor="#FF6600">
        <td width="89" rowspan="2">No</td>
        <td width="89" rowspan="2">Nama</td>
        <td colspan="26" align="center">Pertemuan</td>
      </tr>
      <tr bgcolor="#FF6600">
        <td width="23" align="center">1</td>
        <td width="24" align="center"> 2</td>
        <td width="20" align="center"> 3</td>
        <td width="19" align="center"> 4</td>
        <td width="20" align="center">5</td>
        <td width="23" align="center">6</td>
        <td width="30" align="center">7</td>
        <td width="30" align="center">8</td>
        <td width="30" align="center">9</td>
        <td width="30" align="center">10</td>
        <td width="30" align="center">11</td>
        <td width="30" align="center">12</td>
        <td width="30" align="center">13</td>
        <td width="30" align="center">14</td>
        <td width="30" align="center">15</td>
        <td width="30" align="center">16</td>
        <td width="30" align="center">17</td>
        <td width="30" align="center">18</td>
        <td width="30" align="center">19</td>
        <td width="30" align="center">20</td>
        <td width="30" align="center">21</td>
        <td width="30" align="center">22</td>
        <td width="30" align="center">23</td>
        <td width="30" align="center">24</td>
        <td width="30" align="center">25</td>
        <td width="30" align="center">26</td>
      </tr>
    <?php
    $sql_murid=mysql_query("SELECT * FROM murid WHERE kelas='8 1' ORDER BY  `nama` ASC ");
    $i=1;
    while($murid=mysql_fetch_array($sql_murid))
    {
    $warna_baris = ($i % 2) ? "warna1" :"warna2";      
    ?>
      <tr class="<?php echo $warna_baris; ?>">
        <td><?php echo $i++; ?></td>
        <td><?php echo $murid['nama'];?></td>
    <?php
        $nis=$murid['nis'];
        $sql_absen=mysql_query("SELECT * FROM absen WHERE nis='$nis'");
    while($absen=mysql_fetch_array($sql_absen))
    {
    ?>
        <td><?php echo $absen['status'];?></td>
    <?php
         }
        ?>  
      </tr>
    <?php
      }
    ?>  
    </table>


    jadi dengan demikian urutan tidak berurut berdasarkan tanggal.

  • edited August 2013
    field yg ada di table murid apa saja ?
    field yg ada di table absen apa saja ?

    db gui yg elo pake apa ?
  • edited August 2013
    -- Struktur dari tabel `murid` --
    CREATE TABLE IF NOT EXISTS `murid` (
    `nis` INT(20) NOT NULL,
    `nama` VARCHAR(50) DEFAULT NULL,
    `kelas` VARCHAR(10) DEFAULT NULL,
    `gender` VARCHAR(1) DEFAULT NULL,
    `alamat` VARCHAR(255) DEFAULT NULL,
    `no_telp` INT(15) DEFAULT NULL,
    `no_hp1` INT(15) DEFAULT NULL,
    `no_hp2` INT(15) DEFAULT NULL,
    `no_hp3` INT(15) DEFAULT NULL,
    `tempat_lahir` VARCHAR(50) DEFAULT NULL,
    `tanggal_lahir` DATE DEFAULT NULL,
    `asal_sekolah` VARCHAR(50) DEFAULT NULL,
    `tahun_ajaran` VARCHAR(15) DEFAULT NULL,
    PRIMARY KEY (`nis`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
     
    -- Dumping data untuk tabel `murid`--
    INSERT INTO `murid` (`nis`, `nama`, `kelas`, `gender`, `alamat`, `no_telp`, `no_hp1`, `no_hp2`, `no_hp3`, `tempat_lahir`, `tanggal_lahir`, `asal_sekolah`, `tahun_ajaran`)
    VALUES
    (111207080, 'FAJAR DIKA ARDIAN', '8 2', 'L', '-', 0, 0, 0, 0, '-', '1999-01-01', '-', '2012-2013'),
    (121307099, 'MUHAMMAD IBNU ISMAIL', '8 2', 'L', 'Palsigunung rt.1/5 no.37', 0, 0, 0, 0, 'JAKARTA', '2000-02-26', 'MI ANNIZOMIYAH', '2012-2013'),
    (121307055, 'FANY RAHMALIA', '8 2', 'P', 'Sidamukti rt.4/10', 0, 0, 0, 0, 'JAKARTA', '2000-01-25', 'MI DARUL FALAH 1', '2012-2013'),
    (121307125, 'HAURA TAQI ADILAH', '8 2', 'P', 'Cipayung Rt.5/1', 0, 0, 0, 0, 'DEPOK', '2000-03-14', 'SDN MEKAR JAYA', '2012-2013'),
    (121307085, 'ANNISA ANDARI DJUFA', '8 2', 'P', 'Cilangkap rt.1/12', 0, 0, 0, 0, 'BOGOR', '1998-09-27', 'SDN CILANGKAP 1', '2012-2013'),
    (121307131, 'M. ALI HAMZAH', '8 2', 'L', 'nyencle rt.3/12', 0, 0, 0, 0, 'DEPOK', '2000-01-01', 'SDN CILANGKAP 1', '2012-2013'),
    (121307048, 'BAYU AJI PRASETYA', '8 2', 'L', 'Perum Laguna, blok c.3/31', 0, 0, 0, 0, 'SRAGEN', '2000-07-11', 'SDN CILANGKAP 1', '2012-2013'),
    (121307084, 'ANASTASYA PUSPITA MARTA', '8 2', 'P', 'sidamukti rt.5/10', 0, 0, 0, 0, 'PURWOKERTO', '2000-05-15', 'SDN CILANGKAP 2', '2012-2013'),
    (121307142, 'QONITAH FAUZIYAH', '8 2', 'P', 'sidamukti rt.2/22 no.26', 0, 0, 0, 0, 'DEPOK', '1999-11-28', 'SDN CILANGKAP 2', '2012-2013'),
    (121307051, 'DEVA WAHYU PRABOWO', '8 2', 'L', 'jati jajar swadaya, rt.4/6', 0, 0, 0, 0, 'NGAWI', '1999-12-03', 'SDN SUKAMAJU BARU 3', '2012-2013'),
    (121307041, 'AGUNG PRABOWO', '8 2', 'L', 'Bedahan rt.4/1', 0, 0, 0, 0, '-', '2000-01-01', 'SDN KALIBARU 3', '2012-2013'),
    (111207080, 'FAJAR DIKA ARDIAN', '8 1', 'L', '-', 0, 0, 0, 0, '-', '1999-01-01', '-', '2012-2013'),
    (121307099, 'MUHAMMAD IBNU ISMAIL', '8 1', 'L', 'Palsigunung rt.1/5 no.37', 0, 0, 0, 0, 'JAKARTA', '2000-02-26', 'MI ANNIZOMIYAH', '2012-2013'),
    (121307055, 'FANY RAHMALIA', '8 1', 'P', 'Sidamukti rt.4/10', 0, 0, 0, 0, 'JAKARTA', '2000-01-25', 'MI DARUL FALAH 1', '2012-2013'),
    (121307125, 'HAURA TAQI ADILAH', '8 1', 'P', 'Cipayung Rt.5/1', 0, 0, 0, 0, 'DEPOK', '2000-03-14', 'SDN MEKAR JAYA', '2012-2013'),
    (121307085, 'ANNISA ANDARI DJUFA', '8 1', 'P', 'Cilangkap rt.1/12', 0, 0, 0, 0, 'BOGOR', '1998-09-27', 'SDN CILANGKAP 1', '2012-2013'),
    (121307131, 'M. ALI HAMZAH', '8 1', 'L', 'nyencle rt.3/12', 0, 0, 0, 0, 'DEPOK', '2000-01-01', 'SDN CILANGKAP 1', '2012-2013'),
    (121307048, 'BAYU AJI PRASETYA', '8 1', 'L', 'Perum Laguna, blok c.3/31', 0, 0, 0, 0, 'SRAGEN', '2000-07-11', 'SDN CILANGKAP 1', '2012-2013'),
    (121307084, 'ANASTASYA PUSPITA MARTA', '8 1', 'P', 'sidamukti rt.5/10', 0, 0, 0, 0, 'PURWOKERTO', '2000-05-15', 'SDN CILANGKAP 2', '2012-2013'),
    (121307142, 'QONITAH FAUZIYAH', '8 1', 'P', 'sidamukti rt.2/22 no.26', 0, 0, 0, 0, 'DEPOK', '1999-11-28', 'SDN CILANGKAP 2', '2012-2013'),
    (121307051, 'DEVA WAHYU PRABOWO', '8 1', 'L', 'jati jajar swadaya, rt.4/6', 0, 0, 0, 0, 'NGAWI', '1999-12-03', 'SDN SUKAMAJU BARU 3', '2012-2013'),
    (121307041, 'AGUNG PRABOWO', '8 1', 'L', 'Bedahan rt.4/1', 0, 0, 0, 0, '-', '2000-01-01', 'SDN KALIBARU 3', '2012-2013');
    ---------------------------------------------------------------------------------------------
  • edited August 2013
    -- Struktur dari tabel `kelas`--
    CREATE TABLE IF NOT EXISTS `kelas` (
    `id_kelas` INT(5) NOT NULL AUTO_INCREMENT,
    `nama_kelas` VARCHAR(3) NOT NULL,
    `jumlah_kursi` INT(2) NOT NULL,
    PRIMARY KEY (`id_kelas`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
     
    -- Dumping data untuk tabel `kelas`--
    INSERT INTO `kelas` (`id_kelas`, `nama_kelas`, `jumlah_kursi`) VALUES
    (1, '7 1', 24),
    (2, '7 2', 25),
    (3, '7 3', 23),
    (4, '8 1', 22),
    (5, '8 2', 20),
    (6, '8 3', 21),
    (7, '9 1', 25),
    (8, '9 2', 26),
    (9, '9 3', 23);
    ----------------------------------------------------------------------------------------------
     
    -- Struktur dari tabel `guru`--
    CREATE TABLE IF NOT EXISTS `guru` (
    `nip` INT(15) NOT NULL AUTO_INCREMENT,
    `nama` VARCHAR(255) NOT NULL,
    `foto` tinytext NOT NULL,
    `email` VARCHAR(255) NOT NULL,
    `id_mata_pelajaran` INT(5) NOT NULL,
    `username` VARCHAR(20) NOT NULL,
    `password` VARCHAR(100) NOT NULL,
    `id_session` tinytext NOT NULL,
    PRIMARY KEY (`nip`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;
     
    -- Dumping data untuk tabel `guru`--
    INSERT INTO `guru` (`nip`, `nama`, `foto`, `email`, `id_mata_pelajaran`, `username`, `password`, `id_session`) VALUES
    (1, 'Fauzan', '1.jpg', 'sangpemimpi24n@gmail.com', 5, 'fauzan', '5f4dcc3b5aa765d61d8327deb882cf99', '');
    ------------------------------------------------------------------------------------------------
     
    -- Struktur dari tabel `absen`--
    CREATE TABLE IF NOT EXISTS `absen` (
    `id_absen` INT(5) NOT NULL AUTO_INCREMENT,
    `nip` INT(9) NOT NULL,
    `nis` INT(15) NOT NULL,
    `jam` VARCHAR(10) NOT NULL,
    `tanggal` VARCHAR(20) NOT NULL,
    `status` VARCHAR(5) NOT NULL,
    `keterangan` tinytext NOT NULL,
    PRIMARY KEY (`id_absen`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    -----------------------------------------------------------------------------------------
     
    -- Struktur dari tabel `jadwal_mengajar`--
    CREATE TABLE IF NOT EXISTS `jadwal_mengajar` (
    `id_jadwal` INT(5) NOT NULL AUTO_INCREMENT,
    `nip` INT(15) NOT NULL,
    `id_kelas` INT(5) NOT NULL,
    `hari_mengajar` VARCHAR(6) NOT NULL,
    `jam_mulai` TIME NOT NULL,
    `jam_selesai` TIME NOT NULL,
    PRIMARY KEY (`id_jadwal`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
     
    -- Dumping data untuk tabel `jadwal_mengajar`--
    INSERT INTO `jadwal_mengajar` (`id_jadwal`, `nip`, `id_kelas`, `hari_mengajar`, `jam_mulai`, `jam_selesai`)
    VALUES
    (2, 1, 4, 'jumat', '08:05:00', '09:00:00'),
    (3, 1, 5, 'jumat', '09:05:00', '10:00:00');
  • elo pake db gui apa ?

    btw, itu tanggal 1-26 ...
    apa tiap bulan hanya masuk sekolah tgl 1-26 ?
    atau itu hanya mencatat hari masuk saja ?
    kalo hanya hari masuk (1-26 bukan merujuk pd tanggal), apa dalam 1 bulan pasti masuk 26 hari ?
    bagaimana hari minggu ?
    sabtu libur atau tidak ?
    hari libur nasional ?
    elo punya table hari libur ?

    elo jawab dulu, biar jelas semuanya ...
  • haduh.. sorry-sorry mas..
    iya saya ga liat postingan. reply dari tadi.
    hehehe

    pake DB GUI XAMPP.

    dan untuk tanggal saya jd 26 karna say potong dengan hari minggu..
    nah saya ga kepikiran tuh untuk hari libur nasional
  • edited August 2013
    xampp bukan db gui ...

    nih list db gui yg umum kalo pake mysql : http://en.wikipedia.org/wiki/MySQL#Graphical
    elo pake apa ?

    elo hapus dah reply yg kagak ada kaitannya dengan masalah
    bikin susah bacanya
  • edited August 2013
    ooh.. 
    gw pake phpMyAdmin.

    sip udah.
  • edited August 2013
    apa 1 bulan pasti masuk 26 hari ?

    agustus 2013 ini aja dah ...
    jumlah hari 31
    hari minggu 4 hari

    31 - 4 = 27 hari, bukan 26 hari

    juli 2013, jumlah hari 31, minggu 4 hari ... 27 hari
    juni 2013, jumlah hari 30, minggu 5 hari ... 25 hari
    februari 2013, jumlah hari 28, minggu 4 hari ... 24 hari

    mau fleksible atau fix ?
    mau fleksible berdasar hari masuk ?
    atau mau fleksible berdasar tanggal kalender ?
  • oh jadi untuk bulan yang jumlah harinya ada 30 sudah pasti minggu ada 5 hari..

    kalo bisa fleksibel alangkah lebih baik mas..
    brarti saya salah. 
  • elo coba query ini di phpmyadmin elo ...

    SELECT
    a.nis,
    YEAR(a.tanggal) AS thn,
    MONTH(a.tanggal) AS bln,
    GROUP_CONCAT(DAY(a.tanggal) ORDER BY a.tanggal ASC SEPARATOR ",") AS tgl,
    GROUP_CONCAT(a.status ORDER BY a.tanggal ASC SEPARATOR ",") AS stat

    FROM `absen` a

    GROUP BY DATE_FORMAT(a.tanggal, "%Y%m"), a.nis

    apa yg elo dapet ?

  • diphpmyadmin berhasil nge'group dengan sendirinya mas.
    kok bisa gitu?

    111207001NULLNULL[BLOB - NULL]alfa,hadir,hadir,hadir,hadir,hadir,hadir,hadir,had...
    hebat.
    ^_^
  • edited August 2013
    coba elo posting row hasil lebih banyakan, 3-4 row ...
    posting isinya sesuai hasil yg di dapat ...

    btw,
    hasil YEAR() dan MONTH() kok bisa NULL ?
    harusnya sesuai tahun dan bulan absen ...

    ampun dah ... tipe tanggal elo varchar ???
    kok bisa pilih tipe varchar buat mencatat tanggal to maaasssssss ...

    sorting bakalan ruwet
    fungsi tanggal kagak ada yg bisa dipake
    group by sama ruwetnya
  • edited August 2013
    ini..
    111207007NULLNULL[BLOB - NULL]hadir,hadir,hadir,hadir,hadir,hadir,hadir,hadir,ha...
    111207008NULLNULL[BLOB - NULL]hadir,hadir,hadir,hadir,hadir,hadir,hadir,hadir,ha...
    111207010NULLNULL[BLOB - NULL]hadir,alfa,hadir,hadir,hadir,hadir,hadir,hadir,had...
    111207014NULLNULL[BLOB - NULL]hadir,hadir,hadir,hadir,hadir,hadir,hadir,hadir,ha...

    hahaha, emang konyol sih..
    karna gw berfikir sama aja text-text jg..
    dan selama ini gw iseng-iseng berhasil buat nyimpen manggil dan filter dan kondisiin pake koding php..
    hehe

    ketambah referensi gw masih dikit, temen buat sharing ga ada apa lagi guru wah itu harapan saya dari dulu..
    hehe

    sejauh ini aja gw udah seneng ada orang yang baik hati malem" gini mau nanggepin + bantu mikirin kaya mas..
    gw banyak belajar otodidak dan berusaha ngakalin hal yang gw ga tau..
    karna bingung mau nanya ke mana..
    ini yang pertama kalinya loh gw masuk komunitas.


    yaudah kalo gitu gw rubah typenya jd DATE aja ya?
  • edited August 2013
    tipe datetime
    format value yg tersimpan jadinya : YYYY-MM-DD HH:II:SS
    contoh isi : 2013-08-23 07:00:00

    itu berarti sekalian elo gabung field `jam`
    kagak perlu field `jam` tipe varchar
    gabung jadi satu field yg pengelolaannya lebih mudah

    otomatis elo harus ubah seluruh script yg berkaitan dengan field-field tsb ...

    benerin dulu script yg berkaitan dgn field-field yg diubah
    baru bahas masalah absen lagi
  • udah saya rubah.. di database data yang kesimpen jg gini
    2013-08-23 07:00:00
    format sama persis setelah  absen tersimpan.

    lalu mas?
  • coba ulang query nya, posting kemari 3-4 baris hasilnya
  • itu om panda:

    11120700420138[BLOB - 2 Bytes]hadir
    11120700720138[BLOB - 2 Bytes]hadir
    11120700820138[BLOB - 2 Bytes]hadir
    kenapa tanggalnya ga tampil ya?
  • edited August 2013
    emang isi tanggal table absen elo apa ?

    kalo semua isinya : 2013-08-23 07:00:00
    ya kagak heran nungulnya kaya gitu ...

    kalo itu sesuai isian yg semula * misal, gw kira-kira *
    nis | tanggal (varchar) | jam (varchar) | status
    01 | 2013-08-01 | 07:00:00 | hadir
    02 | 2013-08-01 | 07:00:00 | hadir
    01 | 2013-08-02 | 07:00:00 | hadir
    02 | 2013-08-02 | 07:00:00 | hadir
    01 | 2013-08-03 | 07:00:00 | hadir
    02 | 2013-08-03 | 07:00:00 | hadir

    atau misal ...

    nis | tanggal (varchar) | jam (varchar) | status
    01 | 1 Agustus 2013 | 07:00:00 | hadir
    02 | 1 Agustus 2013 | 07:00:00 | hadir
    01 | 2 Agustus 2013 | 07:00:00 | hadir
    02 | 2 Agustus 2013 | 07:00:00 | hadir
    01 | 3 Agustus 2013 | 07:00:00 | hadir
    02 | 3 Agustus 2013 | 07:00:00 | hadir

    harusnya, setelah elo ubah, tetap dengan isian semula
    tapi hanya tipe (dan format nya kalo beda) yg berubah

    nis | tanggal (datetime) | status
    01 | 2013-08-01 07:00:00 | hadir
    02 | 2013-08-01 07:00:00 | hadir
    01 | 2013-08-02 07:00:00 | hadir
    02 | 2013-08-02 07:00:00 | hadir
    01 | 2013-08-03 07:00:00 | hadir
    02 | 2013-08-03 07:00:00 | hadir

    emang sebelumnya, isi tanggal elo kaya apa ?

    coba dah, elo isi lengkap absen seri 1-3 bulan utk semua nis
    biar kalo nyoba query keliatan hasilnya



    btw, gw ngantuk, mau tidur ... lanjut besok pagi kalo mau ...
  • ok deh.. bsk kita lanjut..

    sebentarniy... gw manggil lo apa ya?
    om panda, mas panda, pak panda apa bung panda?

    thank's ya... baru kali ini gw ketemu sama orang kaya ilmu yang baik.

    sekali lagi thank's niy bung panda..
  • edited August 2013
    gw pake db gui sqlyog (ada yg gratis)
    query di atas, tanggalnya keluar bener seperti yg gw mau
    cuma kalo di phpmyadmin, yg keluar berdasar tipenya : blob, default kagak keliatan isinya

    kalo buat testing, bisa di convert / cast dulu jadi char, biar bisa dibaca
    tapi ntar saat dipake di koding, terserah, kagak di convert / cast juga kagak masalah

    SELECT
    a.nis,
    YEAR(a.tanggal) AS thn,
    MONTH(a.tanggal) AS bln,
    CONVERT(GROUP_CONCAT(DAY(a.tanggal) ORDER BY a.tanggal ASC SEPARATOR ","),CHAR) AS tgl,
    GROUP_CONCAT(a.status ORDER BY a.tanggal ASC SEPARATOR ",") AS stat

    FROM `absen` a

    GROUP BY DATE_FORMAT(a.tanggal, "%Y%m"), a.nis



    atau ...
    kalo di phpmyadmin, di atas tabular hasil query, ada pilihan : + Options
    klik "+ Options", check "[v] Show BLOB contents", klik "Go"
    isi tipe blob bakal dimunculin

    coba ulang query nya, posting kemari 3-4 baris hasilnya

    selanjutnya, gw tetep pake referensi query tanpa convert / cast
  • selamat pagi..

    berasil bung..

    1112070012013823hadir
    1112070042013823hadir
    1112070072013823hadir
    1112070082013823hadir


  • edited August 2013
    coba table absen diisi banyakan,
    biar tau hasilnya kaya apa kalo tanggal absen nya lebih dari satu
    dengan isian status bukan cuma "hadir"
    sekalian buat memeriksa relasi tanggal dan status per nis sesuai / benar atau tidak

    sekalian elo lihat, tanggal yg nungul urut atau tidak ...
    yg artinya, kalo relasi tanggal dan status benar, otomatis status juga urut dengan benar sesuai tanggal



    kalo sudah bener urutan dan status nya
    yg elo butuh nama murid dan kelas ... itu ada di table murid

    tau query join ?
    join table murid ke query di atas, sekalian select field yg dibutuhkan

    SELECT
    m.kelas,
    a.nis,
    m.nama,
    YEAR(a.tanggal) AS thn,
    MONTH(a.tanggal) AS bln,
    GROUP_CONCAT(DAY(a.tanggal) ORDER BY a.tanggal ASC SEPARATOR ",") AS tgl,
    GROUP_CONCAT(a.status ORDER BY a.tanggal ASC SEPARATOR ",") AS stat

    FROM `absen` a
    LEFT JOIN `murid` m ON m.nis=a.nis

    GROUP BY DATE_FORMAT(a.tanggal, "%Y%m"), a.nis

    elo coba query di atas, posting kemari 3-4 baris hasilnya



    kalo hasil sudah berkesesuaian ...
    elo urutin dah sesuai yg elo mau, urut nama
    sekalian urut kelas

    SELECT
    m.kelas,
    a.nis,
    m.nama,
    YEAR(a.tanggal) AS thn,
    MONTH(a.tanggal) AS bln,
    GROUP_CONCAT(DAY(a.tanggal) ORDER BY a.tanggal ASC SEPARATOR ",") AS tgl,
    GROUP_CONCAT(a.status ORDER BY a.tanggal ASC SEPARATOR ",") AS stat

    FROM `absen` a
    LEFT JOIN `murid` m ON m.nis=a.nis

    GROUP BY DATE_FORMAT(a.tanggal, "%Y%m"), a.nis

    ORDER BY m.kelas, m.nama

    elo coba query di atas, posting kemari 3-4 baris hasilnya



    kalo urutan sudah bener ...
    elo masukin dah kondisi kalo elo butuh menampilkan sesuai kelas dan bulan / tahun absen tertentu

    SELECT
    m.kelas,
    a.nis,
    m.nama,
    YEAR(a.tanggal) AS thn,
    MONTH(a.tanggal) AS bln,
    GROUP_CONCAT(DAY(a.tanggal) ORDER BY a.tanggal ASC SEPARATOR ",") AS tgl,
    GROUP_CONCAT(a.status ORDER BY a.tanggal ASC SEPARATOR ",") AS stat

    FROM `absen` a
    LEFT JOIN `murid` m ON m.nis=a.nis

    WHERE
    m.kelas = "8 1"
    AND YEAR(a.tanggal) = "2013"
    AND MONTH(a.tanggal) = "8"


    GROUP BY DATE_FORMAT(a.tanggal, "%Y%m"), a.nis

    ORDER BY m.kelas, m.nama

    elo coba query di atas, posting kemari 3-4 baris hasilnya



    kalo yg di atas sudah beres ... baru masuk ke koding
  • edited August 2013
    bung panda,,
    sudah saya sesuaikan..
    berhasil.. untuk status berurut
    8 1  111207036ALWAN DANI SEPTIAN WAHYU20138[BLOB - 9 Bytes]alfa,hadir,izin,hadir,alfa
    8 1111207001AMIR HAMZAH MAULANA .R20138[BLOB - 9 Bytes]alfa,izin,sakit,hadir,hadir
    8 1111207038ANDIKA FATAH MAULANA20138[BLOB - 9 Bytes]sakit,hadir,izin,hadir,alfa
    8 1111207041ARDHI YAUMA PRAWIRA20138[BLOB - 9 Bytes]hadir,hadir,alfa,hadir,hadir
    Untuk Nis 111207036 Alwan Dani Septiawan
    sebelomnya gw input absen dari tanggal 01-08-2013 s/d 01-08-2013
    ----------------------------------------------------------------------------
    kamis    | 01-08-2013 | alfa
    jumat     | 02-08-2013 | hadir
    sabtu     | 03-08-2013 | izin
    minggu  | 04-08-2013 | hadir
    senin     | 06-08-2013 | alfa
    8 1  111207036ALWAN DANI SEPTIAN WAHYU20138[BLOB - 9 Bytes]alfa,hadir,izin,hadir,alfa


    dia ngurut bung..
  • edited August 2013
    sekarang diputuskan ...

    kalo mau fleksible, fleksible berdasar apa ?
    jumlah hari masuk (kaya yg sekarang elo pake, tapi dibuat fleksible) ?
    atau jumlah hari tiap bulan (jan=31, feb=28/29, mar=31, dst) ?

    beda pilihan, beda cara
    kerangkanya sama ...

    - tentukan batas MAX tanggal, tergantung pilihan di atas
    kalo pake model tanggal kalender :
    date('t', strtotime('2013-08-01'))

    kalo pake model hari masuk :
    date('t', strtotime('2013-08-01'))-(date('W', strtotime('2013-09-01'))-date('W', strtotime('2013-08-01')));

    - loop FOR utk generate judul kolom tanggal, batas max berdasar hasil MAX
    - jalankan query di atas
    - loop WHILE baca data
    - explode() string tgl = "1,2,3,..." jadi array tgl = array(1,2,3,...)
    - explode() string stat = "hadir,hadir,hadir,..." jadi array stat = array("hadir","hadir","hadir",...)
    - jalankan array_combine(), array tgl jadi key, array stat jadi value,
    dapat array status = aray(1=>"hadir",2=>"hadir",3=>"hadir",...)
    - cetak kolom informasi nama, dll

    kalo pake model tanggal kalender :
    - loop FOR, batas max berdasar hasil MAX
    - cetak kolom status, isinya cukup echo $array_status[$index_loop]

    kalo pake model hari masuk :
    - loop FOREACH array status
    - cetak kolom status, isinya value dari FOREACH

    - akhir loop WHILE baca data



    jadi lebih simple dan lebih ringan dari alur elo pertama kali
    - query cuma 1 kali ... jauh lebih enteng
    - 1 loop WHILE, bukan 2x loop WHILE bertumpuk
    - 1 loop FOR / FOREACH buat gantiin loop WHILE kedua
  • edited August 2013
    sorry baru masuk forum lg..

    :D

    bung panda, sepertinya gw pilih alur yang pertama aja..
    perkembangan source sudah jd gini bung:

    tampilan 


    <table border="0" bgcolor="#CCCCCC">
    <tbody><tr bgcolor="#FF6600">
    <td width="89" rowspan="2">No</td>
    <td width="89" rowspan="2">Nama</td>
    <td colspan="26" align="center">Pertemuan</td>
    </tr>
    <tr bgcolor="#FF6600">
    <!--?php
    $kelas=$_GET['kelas'];
    $sekarang=date('m');
    $no=1;
    $query_absen=mysql_query("SELECT DISTINCT DATE_FORMAT( tanggal, '%d-%m-%Y') as tgl,DATE_FORMAT( tanggal, '%m') as bulan FROM absen WHERE bulan='$sekarang' ORDER BY 'tgl' ASC ");
     
    while($data_absen=mysql_fetch_array($query_absen))
    {
    ?-->
    <td align="center"><font color="#FFF"><b> Ke : <!--?php echo $no++ ?--> </b></font>| <!--?php echo $data_absen['tgl']; ?--></td>
    <!--?php
    }
    ?-->
    </tr>
    <!--?php
    $sql_murid=mysql_query("SELECT * FROM murid WHERE kelas='$kelas' ORDER BY `nama` ASC ");
    $i=1;
    while($murid=mysql_fetch_array($sql_murid))
    {
    $warna_baris = ($i % 2) ? "warna1" :"warna2";
    ?-->
    <tr class="&lt;?php echo $warna_baris; ?&gt;">
    <td><!--?php echo $i++; ?--></td>
    <td><!--?php echo $murid['nama'];?--></td>
    <!--?php
    $nis=$murid['nis'];
    $sql_absen=mysql_query("SELECT * FROM absen WHERE nis='$nis' ORDER BY `tanggal` ASC");
    while($absen=mysql_fetch_array($sql_absen))
    {
    ?-->
    <td><!--?php echo $absen['status'];?--></td>
    <!--?php
    }
    ?-->
    </tr>
    <!--?php
    }
    ?-->
    </tbody></table>
  • tp yang terjadi malah:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource inC:\xampp\htdocs\sistem_sekolah\guru\sistem_absensi\laporan_bulanan.php on line 19
    NoNamaPertemuan
    1ALWAN DANI SEPTIAN WAHYUhadirhadir
    2AMIR HAMZAH MAULANA .Rhadirhadir
    3ANDIKA FATAH MAULANAhadirhadir
    seharusnya :
    NoNamaPertemuan
    Ke : 1 | 27-08-2013Ke : 2 | 28-08-2013
    1ALWAN DANI SEPTIAN WAHYUhadirhadir
    2AMIR HAMZAH MAULANA .Rhadirhadir
    3ANDIKA FATAH MAULANAhadirhadir
  • edited August 2013
    ampun dah ...
    dikasih tahu jalan supaya beban proses enteng, malah balik pake query bertingkat ...
    gw ngasih tau alur + logika itu bukan asal jalan mas ...
    yg gw kasih itu solusi yg paling baik dan memungkinkan

    alur yg elo pake beda dengan alur yg gw tunjukin

    kenapa gw saranin pake alur gw :

    [1]
    karena alur gw lebih enteng di proses,
    loop for lebih enteng dibanding query + loop while

    begini kan cukup buat bikin header :

    $bulan = 8;
    $tahun = 2013;
    $maxdate = date('t', strtotime($tahun.'-'.$bulan.'-1'));

    $no = 0;
    for($i=1;$i<$maxdate;$i++) {
      $date = strtotime($tahun.'-'.$bulan.'-'.$i);
      echo date('w',$date)<>0 ? '<td align="center"><font color="#FFF"><b> Ke : ' . (++$no) . '</b></font>| ' . date('d M Y',$date) . '</td>':'';
    }


    proses jauh lebih enteng loop for kaya di atas dibanding :
    query dulu ke db buat nyariin batas, lalu loop while, baca 1-1
    ya kalo datanya dikit, kalo banyak ?
    kagak layak mas loop ke db buat nyari batas, sementara ada solusi lain yg lebih enteng dan ringkas



    [2]
    masalah query bertingkat buat bikin table absensi

    gw pan sudah nunjukin query paling ringkas buat menghasilkan data absensi
    itu sudah paling optimal
    sekali jalan, dapet semua ... cukup 1 kali query

    ini logika proses nya kalo pake query bertumpuk kaya model elo ...

    sekalian gw kasih contoh ekstrim
    anggap data di table murid ada 1.000.000
    ingat jumlah murid selalu bertambah, kagak pernah berkurang
    data murid yg sudah lulus pun seharusnya tetep ada
    otomatis, meskipun saat ini data elo cuma sekian puluh / ratus ... data 1.000.000 atau lebih itu bisa kejadian

    table absen, anggap tiap bulan jumlah hari sama : 30 hari, bakal ada 30 data per murid
    otomatis, 1.000.000 data murid bakal ada 30.000.000 data absensi

    kalo elo pake query bertumpuk
    1. elo memerintahkan db mencari sekian data dari 1.000.000 data berdasar suatu kelas ... anggap dapet 40 data
    2. masuk ke query ke-2, elo memerintahkan db mencari dari 30.000.000 data absensi berdasar murid tertentu
    dan elo ulang sebanyak 40 kali
    otomatis db bakal kerja berat, mengulang pencarian berbeda-beda ke data sejumlah 30.000.000 tadi

    dibanding, kalo sekali eksekusi query, selesai
    mencari 40x terhadap 30.000.000 data
    atau 1x terhadap 30.000.000 data

    secara logika elo pilih mana ?

    query sudah gw tunjukin ...
    alur koding sudah gw tunjukin ...

    nyambung dengan proses bikin header ...

    $kelas = '8 1';

    $sql = mysql_query('SELECT m.kelas, a.nis, m.nama, YEAR(a.tanggal) AS thn, MONTH(a.tanggal) AS bln,
    GROUP_CONCAT(DAY(a.tanggal) ORDER BY a.tanggal ASC SEPARATOR ",") AS tgl,
    GROUP_CONCAT(a.status ORDER BY a.tanggal ASC SEPARATOR ",") AS stat
    FROM `absen` a LEFT JOIN `murid` m ON m.nis=a.nis
    WHERE
    m.kelas = "' . $kelas . '"
    AND YEAR(a.tanggal) = "' . $tahun . '"
    AND MONTH(a.tanggal) = "' . $bulan . '"
    GROUP BY DATE_FORMAT(a.tanggal, "%Y%m"), a.nis ORDER BY m.kelas, m.nama');

    while($row=mysql_fetch_array($sql)) {
      $absen = array_combine( explode(',', $row['tgl']) , explode(',', $row['stat']) );
      echo '<tr><td>' . $row['nis'] .'</td><td>' . $row['nama'] .'</td>';

      for($i=1;$i<$maxdate;$i++) {
        echo date('w',$date)<>0?'<td>' . ( isset($absen[$i]) ? $absen[$i] : '' ) . '</td>':'';
      }

      echo '</tr>';
    }


    simple, gak pake ribet dan berat di proses

    query emang lebih panjang
    tapi secara proses - jauh - jauh - jauh - lebih ringan



    terserah dah, elo pake cara yg mana
    tapi gw sama sekali kagak merekomendasikan cara query bertingkat
  • edited August 2013
    ok,, udah gw coba pake cara yang bung panda rekomendasikan,

    source:

    0 ? '':'';
    }
    $kelas = '8 1';
     
    $sql = mysql_query
    (
    'SELECT m.kelas, a.nis, m.nama, YEAR(a.tanggal) AS thn, MONTH(a.tanggal) AS bln,
    GROUP_CONCAT(DAY(a.tanggal) ORDER BY a.tanggal ASC SEPARATOR ",") AS tgl,
    GROUP_CONCAT(a.status ORDER BY a.tanggal ASC SEPARATOR ",") AS stat
    FROM `absen` a LEFT JOIN `murid` m ON m.nis=a.nis
    WHERE
    m.kelas = "' . $kelas . '"
    AND YEAR(a.tanggal) = "' . $tahun . '"
    AND MONTH(a.tanggal) = "' . $bulan . '"
    GROUP BY DATE_FORMAT(a.tanggal, "%Y%m"), a.nis ORDER BY m.kelas, m.nama'
    );
    $zebra=1;
    while($row=mysql_fetch_array($sql))
    {
    $warna_baris = ($zebra % 2) ? "warna1" :"warna2";
    $absen = array_combine( explode(',', $row['tgl']) , explode(',', $row['stat']) );
    ?&gt;
    0?'':'';
    }
    ?&gt;
    <table border="0" bgcolor="#CCCCCC">
    <tbody><tr bgcolor="#FF6600">
    <td width="30" rowspan="2">No</td>
    <td width="89" rowspan="2">Nama</td>
    <td colspan="31" align="center">Pertemuan</td>
    </tr>
    <tr bgcolor="#FF6600">
    <!--?php
    $bulan = 8;
    $tahun = 2013;
    $maxdate = date('t', strtotime($tahun.'-'.$bulan.'-1'));
     
    $no = 0;
    for($i=1;$i<$maxdate;$i++)
    {
    $date = strtotime($tahun.'-'.$bulan.'-'.$i);
    echo date('w',$date)<--><td align="center"><font color="#FFF"><b> Ke : ' . (++$no) . '</b></font>| ' . date('d M Y',$date) . '</td></tr><tr class="&lt;?php echo $warna_baris; ?&gt;">
    <td><!--?php echo $zebra++; ?--></td>
    <td><!--?php echo $row['nama']; ?--></td>
    <!--?php
    for($i=1;$i<$maxdate;$i++)
    {
    echo date('w',$date)<--><td>' . ( isset($absen[$i]) ? $absen[$i] : '' ) . '</td></tr>
    <!--?php
    }
    ?-->
    </tbody></table>


    tp masih ada bugsnya jg,  ternyata record yang tampil tidak berurut tanggal.  
    data yang tersimpan di table absen: tanggal 2013-08-06
    record yang tampil malah di tanggal 7 agustus,  kenapa ya?  
    Tampilan :

    NoNamaPertemuan
    Ke : 1| 01 Aug 2013Ke : 2| 02 Aug 2013Ke : 3| 03 Aug 2013Ke : 4| 05 Aug 2013Ke : 5| 06 Aug 2013Ke : 6| 07 Aug 2013Ke : 7| 08 Aug 2013Ke : 8| 09 Aug 2013Ke : 9| 10 Aug 2013Ke : 10| 12 Aug 2013Ke : 11| 13 Aug 2013Ke : 12| 14 Aug 2013Ke : 13| 15 Aug 2013Ke : 14| 16 Aug 2013Ke : 15| 17 Aug 2013Ke : 16| 19 Aug 2013Ke : 17| 20 Aug 2013Ke : 18| 21 Aug 2013Ke : 19| 22 Aug 2013Ke : 20| 23 Aug 2013Ke : 21| 24 Aug 2013Ke : 22| 26 Aug 2013Ke : 23| 27 Aug 2013Ke : 24| 28 Aug 2013Ke : 25| 29 Aug 2013Ke : 26| 30 Aug 2013
    1ALWAN DANI SEPTIAN WAHYUizin
    2AMIR HAMZAH MAULANA .Rsakit
    3ANDIKA FATAH MAULANAhadir
  • edited August 2013
    itu alur nya gimana to ?
    kok bisa ada for di dalam for ?
    while nya kok bisa ada di atas ?



    dibaca to mas alur yg gw tulis ...

    - tentukan batas MAX tanggal, tergantung pilihan di atas
    kalo pake model tanggal kalender :
    date('t', strtotime('2013-08-01')) <-- elo pake yg ini

    kalo pake model hari masuk :
    date('t', strtotime('2013-08-01'))-(date('W', strtotime('2013-09-01'))-date('W', strtotime('2013-08-01')));

    - loop FOR utk generate judul kolom tanggal, batas max berdasar hasil MAX <-- ini loop FOR utk bikin header
    - jalankan query di atas <-- ini eksekusi query SELECT
    - loop WHILE baca data <-- ini WHILE baca data
    - explode() string tgl = "1,2,3,..." jadi array tgl = array(1,2,3,...) <-- ini ...
    - explode() string stat = "hadir,hadir,hadir,..." jadi array stat = array("hadir","hadir","hadir",...) <-- ini ...
    - jalankan array_combine(), array tgl jadi key, array stat jadi value,
    dapat array status = aray(1=>"hadir",2=>"hadir",3=>"hadir",...) <-- dan ini, untuk membuat $absen
    - cetak kolom informasi nama, dll

    kalo pake model tanggal kalender :
    - loop FOR, batas max berdasar hasil MAX <-- ini loop FOR cetak data absen
    - cetak kolom status, isinya cukup echo $array_status[$index_loop]

    kalo pake model hari masuk :
    - loop FOREACH array status
    - cetak kolom status, isinya value dari FOREACH

    - akhir loop WHILE baca data <-- akhir loop WHILE baca data



    kagak ada loop FOR di dalam loop FOR
    yg ada loop FOR di dalam WHILE, utk cetak data absen

    strukturnya :
    FOR cetak header { }
    SELECT ...
    WHILE baca data {
      FOR cetak absen { }
    }



    bisa dibaca buat rujukan :
    http://www.diskusiweb.com/discussion/45035/solved-tanya-mysql-bagaimana-cara-membuat-view-yang-jumlah-kolomnya-dinamis-/p1

    yg disana masalahnya sudah selesai, query dan koding pakai rujukan di tret ini juga
    bukan tampilan absen, tapi nilai,
    jumlah kolom mata pelajaran juga dinamis, tapi terdefinisi di dalam table ... jadi emang harus baca db utk generate header
    yg disini cukup pake fungsi date karena cuma berhubungan dengan tanggal



    btw,
    <td colspan="31" align="center">Pertemuan</td>

    itu juga bikin masalah, jumlah kolom bukan 31, tapi dinamis tergantung jumlah hari
    pake value di $maxdate
  • terimakasih om panda.
    atas bantuan om panda web saya sudah clear. :D
Sign In or Register to comment.