Tolong pilih kategori sesuai, jenis posting (pertanyaan atau bukan) dan sertakan tag/topik yang sesuai misal komputer, php, mysql, dll.
Promosi atau posting tidak pada tempatnya akan kami hapus.
Mencantumkan kode program di posting Anda, tolong ikuti aturan yang sesuai, baca http://diskusiweb.com/discussion/39204/aturan-cara-menyisipkan-kode-program-di-diskusiweb

Baca cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

Tanya SQL

Dear para master PHP

Saya ada pertanyaan sedikit tentang mysql
Saya punya tabel A
isinya id dan tgl
Saya mau menampilkan data history
gimana cara mengoptimasi sqlnya ya
Jadi
Tabel A
id          nip                 tgl                              ipk
1           1                 2013-04-01                 3
2           1                 2013-04-03                 4
3           1                 2013-04-08                 5
4           2                 2013-04-02                 2
5           2                 2013-04-03                 3

Gimana Nampilin Supaya Jadi

nip         2013-04-01   2013-04-02  2013-04-03  2013-04-04  2013-04-05  2013-04-06  2013-04-07  2013-04-08  dst
1                    3               0                4                   0              0                   0              0                5
2                    0               2                3                   0              0                   0              0                0
dst

selain menggunakan algoritma dibawah ini
for i=tanggal awal smpai dengan tanggal akhir
    query ("SELECT ipk FROM A WHERE tgl=i and nip in (1,2))

apa ada cara lain utk mengatasi masalah diatas agar dpt lebih cepat data ditampilkan dan tdk memakan banyak resource
cara optimasi dari proses di atas

Terimakasih
sebelumnya.

Tanggapan

  • edited May 2013
    mungkin seperti ini:
    SELECT nip, 
    MAX(IF(tgl = '2013-04-01', ipk, 0)) AS '2013-04-01',
    MAX(IF(tgl = '2013-04-02', ipk, 0)) AS '2013-04-02',
    MAX(IF(tgl = '2013-04-03', ipk, 0)) AS '2013-04-03',
    MAX(IF(tgl = '2013-04-04', ipk, 0)) AS '2013-04-04'
    FROM A
    GROUP BY nip


    query MAX nya di rangkai dulu aja pake looping pake bahasa pemrograman, nanti di satuin di sql nya.
    Contoh pake php:
    $sql_max = '';
    for ($i=1; $i < 32; $i++) {
    $sql_max .= "MAX(IF(tgl = '2013-04-".$i."', ipk, 0)) as '2013-04-".$i."',"
    }
    // sebelumnya hilangkan koma di akhir $sql_max
    // cari sendiri caranya ilangin koma di belakang string :p
    $sql = "SELECT nip, ".$sql_max." FROM A GROUP BY nip";
    $result = mysql_query($sql);
  • OK saya coba dulu

    Terima kasih atas sarannya
Sign In or Register to comment.