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.
Klik link berikut untuk informasi 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

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

Gagal query untuk report dengan data yang berbeda

Permasalahan 1 :
Jadi gue ada masalah mengenai pembuatan report dengan data berbeda. Jadi gue punya 2 tabel di sini
  1. Monthly Plan
  2. Daily Plan
Ini hasil yg Gue Bikin dan gue cuman query yang monthly plannya Ini hasil yg gue pengen tapi hasilnya yg daily plan aku edit di reportnya hasilnya kaya gini :



Permasalahan 2 :
Jika misalkan di Line 10 yang monthly plan cuman satu data sedangkan daily plan ada 3 data. Itu cara siasatinnya gimana ?
Contohnya seperti ini :

Berikut database gue dan contoh masing masing querynya : https://db-fiddle.com/f/2bA7StrBpz18tLFgAQh2QV/3

Dan ini kodingan gue : https://pastebin.com/4Jy1G9yy


Mohon bantuannya.
Tagged:

Comments

  • yg masalah 1 ... masalahnya apa yah ?

    yg masalah 2 itu pake GROUP_CONCAT
    saat ditampilkan mesti pake explode()

    jadi sekali terima record, tetep 1 record,
    tapi kemungkinan daily nya bisa nyambung banyak yg harus di explode() pake delimiter yg elo tentukan sendiri dan harus unik
  • permasalah 1 : jadi di Line 1 yang monthly plan ada dua data, dan di Line 1 daily plan juga ada dua data. Semuanya beda datanya. Waktu aku join di tabel daily plan yg keluar satu data yg sama semua. pdahal di daily plan datanya beda.

    yang permaslahan kedua itu gimana ya, gue belum paham . Itu query gue salah ngga?
  • trus gw bisa tau query nya bener atau salah gimana ?

    lha wong ta coba ta eksekusi keluarnya ini :

    Query : SELECT a.Keterangan, a.IdBukti,c.LineName,a.LineID,a.Tanggal,b.TypeProduksi AS partnamemonthly,a.PartID AS partidmonthly,a.Qt...
    Error Code : 1146
    Table 'test.ms_part' doesn't exist
    Execution Time : 00:00:00:000
    Transfer Time : 00:00:00:000
    Total Time : 00:00:00:000

    :D :D :D
  • edited April 12
    iya sorry table ms_part ngga gue masukin soalnya datanya ada 60rb an
  • kan bisa dipotong, kasih data seperlunya, yg penting cukup bisa liat masalah
  • trus yg daily nya query nya yg mana ?
  • edited April 12
    ya itu gue gabungin, kalau pisah pisah ini https://db-fiddle.com/f/2bA7StrBpz18tLFgAQh2QV/4
  • bentar ... ngelurusin logika dulu aja ... menyamakan persepsi

    monthly plan ... ini bulanan kan ?
    daily plan ... ini harian kan ?

    kalo ini bulanan, kenapa kondisi WHERE yg dipake masih melibatkan tanggal ?
    yyyy-mm-dd ... kenapa masih pake dd -nya ?

    kalo misal rujukannya adalah bulanan pada tanggal tertentu,
    tetep yg diambil mestinya bulan itu, tanpa dd
    kalo pun ada rujukan data lain (daily plan) yg ngikut, baru itu pake dd-nya

    bener ndak kaya begini ?
  • edited April 12
    buka gitu monthly plan disitu itu detailnya. Jadi misalkan bulan April, dipecah lagi itu dinamakan monthly plan. kalau daily plan di situ itu yg diinput tiap hari. jadi monthly plan itu diinput awal bulan terus dipecah jadi beberapa tanggal. contoh di monthly plan(tgl 11 April) jalan part 'A' ternyata actualnya jalan 'B'. nah B itu namanya daily plan
  • edited April 12
    :D

    entah ini salah pengartian di mana ...

    tapi kalo buat gw, model kaya gitu bukan mothly plan dan daily plan
    tapi daily plan dan daily realization

    rencana kerja harian dan realisasinya

    rencananya hari ini kerja A
    tapi realisasinya kerja B

    soalnya kacamata ngeliatnya per hari, jadi penamaannya juga sama "daily"

    kalo dibilang monthly, itu scope nya lebih besar,
    langsung tgl 1 s/d akhir bulan
    jadi kalo mau ngomong "rencana bulan ini" ya langsung ambil gambaran tgl 1 s/d akhir

    cuma masalah istilah sih
    yg penting pemahamannya sudah sama



    lha kalo model elo kaya gitu,
    - table "mothly plan" itu table apa ?
    - table "daily plan" itu table apa ?
    - yg menghubungkan antara table "monthly plan" dgn "daily plan" itu field apa ?
  • ok masalah nama lupakan aja, Intinya ya sama kaya elo daily plan dan daily realization.

    - table monthly plan yg gua maksud ini : trans_ppicbdt_dt
    - table daily plan yg gue maksud : trans_ppich
    - Keduanya dihubungkan dengan field LineID yang sama, contoh :
    Di line 1, monthly plannya ada dua data yaitu Part A & B
    Di line 1, daily plannya ada dua data juga yaitu Part C & D

    Sampai disini paham kan ?
  • edited April 12
    query "monthly plan", posting kemari,
    biar ada pegangan titik berangkatnya dari situ ndak ke mana-mana

    berangkat dari "monthly plan" dulu
    karena itu bisa dibilang titik acuan utama nya
  • edited April 12
    nih querynya https://pastebin.com/Z8dv1gP9

    Jadi gini loh 'monthly plan' yg gue tulis disini itu adalah detail planning bulanannya jadi loe bisa sebut monthly plan gue 'daily plan'. nah kalau daily plan gue itu ya planning realization kaya loe bilang. Sistem di sini gitu soalnya hehe
  • edited April 12
    SELECT
    a.IdBukti,
    a.LineID,
    a.Tanggal,
    a.PartID AS partmonthly,
    a.QtyPlanning AS qtymonthly
    FROM
    trans_ppicbdt_dt a
    WHERE
    a.Tanggal = '2018-04-11'
    AND a.DivisiId='DI070'
    AND a.IdLocation='1'
    GROUP BY
    a.LineID,
    a.PartID
    gw hapus keterangannya dulu

    sekarang melekatkan "daily plan" nya
    SELECT
    a.IdBukti,
    a.LineID,
    a.Tanggal,
    a.PartID AS partmonthly,
    a.QtyPlanning AS qtymonthly,
    b.???,
    b.???,
    b.???,
    b...
    FROM
    trans_ppicbdt_dt a
    LEFT JOIN
    trans_ppich b
    ON
    b.LineID=a.LineID
    AND b.tanggal=a.Tanggal
    AND b.DivisiId=a.DivisiId
    AND b.IdLocation=a.IdLocation
    WHERE
    a.Tanggal = '2018-04-11'
    AND a.DivisiId='DI070'
    AND a.IdLocation='1'
    GROUP BY
    a.LineID,
    a.PartID
    bener kaya gitu ?

    elo definisikan sendiri b.??? nya, karena gw ndak tau field2 mana aja yg elo butuhin

    a. itu planning / monthly nya
    b. itu realisasi / daily nya
  • edited April 12
    masih sama, data (b). realisasinya datanya yg keluar cuman satu. harusnya ada dua data yg beda(partiddaily dan qtydaily). ini yg keluar sama. Baris kedua sama kaya baris pertama malah, harusnya enggak.
  • karena elo pake GROUP BY
    record dari yg monthly dipaksa gabung jadi 1 record

    coba elo hapus GROUP BY nya
  • edited April 12
    Kalau group by nya ilang data yg keluar jadi 4 baris. nih
    .kalau pakai 2 query gimana ? tapi tampilannya kaya yg gue tunjukkin itu. Jadi ada query monthly plan , dan daily plan. Jadi seakan akan ada dua tabel report tapi jadi satu. Paham ngga ?
  • edited April 12
    lha maunya gimana ?

    masalahnya elo sendiri bikin relasi cuma ngandelin LineID

    harusnya kalo bentuknya rencana-realisasi
    itu harus ada relasi yg tepat antara rencana dan realisasi

    bisa one-to-one atau one-to-many

    bahwa rencana X realisasinya A
    atau rencana Y realisasinya N, M & O

    tapi bakal susah kalo many-to-many

    di "monthly" yg LineID L1001 ada 2 (many)
    di "daily" yg LineID L1001 juga ada 2 (many)

    jadi elo harus bener-bener bisa mencatat
    partmonthly "MCMX-FG612-BL-KGX" itu saat pengerjaan jadinya partdaily yg mana



    kalo elo pake 2 query
    - grouping nya susah
    - menentukan daily ini punya monthly yg mana juga ndak jelas
    - elo mau bikin tampilan kaya yg elo mau juga susah, soalnya ndak bisa memprediksi jumlah "daily" nya ada berapa
  • edited April 12
    nggabisa dicatat gitu. Soalnya anatara monthly plan dan daily plan itu tidak bisa dijadikan acuan. Misal '"MCMX-FG612-BL-KGX' saat pengerjaan jalannya dimana nggabisa. iya emang itu tuh dua tabel yg beda, jadi sekakan akan ada dua tabel report ntar dan dua query tapi dalam line yg sama. jadi yg pertama monthly plan itu report pertama dan daily plan itu report kedua. Tapi tampilannya kaya gini . ini contoh data di excel
  • edited April 12
    ya kalo maunya gitu, masalah elo yg kedua ndak bakal bisa diselesaikan

    soalnya masalah elo yg kedua itu bisa selesai jika relasinya one-to-one atau one-to-many
    buat ngitung jumlah rawspan nya
    soalnya saat baca record monthly di 1 titik, harus sudah tau jumlah "anak" nya ada brp

    dan 1 lagi, kalo elo maksa pake 2 query ada bom waktu yg elo tanam
    tiap kali baca 1 record monthly, elo query ke daily
    kalo data sedikit ndak masalah
    tapi kalo data mulai membengkak, query nya bakal jadi lambat

    sudah banyak contoh kasus di tret2 lama yg bawa masalah aplikasi jadi lemot karena data membengkak dan aplikasi pake banyak query

    eksekusi query ndak cuma terima 1 menit (ini aja sudah bisa dibilang lambat)
    10 menit ditunggu tetep ndak keluar hasilnya
  • edited April 12
    duh soalnya waktu input monthly plan itu cuman sekali awal bulan. terus waktu isi daily plan itu setiap hari. masalahnya kalau di buat acuan misalkan tgl 11 April monthly plan = part A dan part B, ternyata realisanya yg dibuat daily plan part C dan D. Itu gimana buat acuannya, kalau yg jadi acuan daily plan adalah part monthly plannya nanti user harus input 2 part dalam satu transaksi dong. yaitu partdaily dan partmonthly. soalnya user yg input hanya tau line yg sama
  • edited April 12
    kecuali ...

    coba begini ...
    SELECT
    a.IdBukti,
    a.LineID,
    a.Tanggal,
    GROUP_CONCAT(DISTINCT CONCAT(a.PartID,"#&#",a.QtyPlanning) ORDER BY a.PartID SEPARATOR "#$#") AS monthly,
    GROUP_CONCAT(DISTINCT CONCAT(b.PartID,"#&#",b.QtyPlanning) ORDER BY b.PartID SEPARATOR "#$#") AS daily
    FROM
    trans_ppicbdt_dt a
    LEFT JOIN
    trans_ppich b
    ON
    b.LineID=a.LineID
    AND b.tanggal=a.Tanggal
    AND b.DivisiId=a.DivisiId
    AND b.IdLocation=a.IdLocation
    WHERE
    a.Tanggal = '2018-04-11'
    AND a.DivisiId='DI070'
    AND a.IdLocation='1'
    bakal banyak pake explode() di koding nya, paling ndak 4x di dalam loop

    tapi itu juga bakal bisa ketemu masalah juga
    kalo misal monthly ada 2 record dgn LineID yg sama
    sementara daily lebih banyak record (lebih dari 2)
    tampilan table nya jadi bagaimana ?

    misal monthly A & B, daily nya R,S & T

    A sebaris dgn R
    B sebaris dgn S
    lalu T nya ?

    itu baru 2 ketemu 3
    lha kalo ketemu 5 ? 7 ? atau lebih banyak lagi ?

    ya kalo monthlynya cuma 2, kalo lebih banyak gimana ?

    lalu kalo daily nya justru lebih sedikit ?
  • kalau monthly plannya lebih sedikit ya kaya yg udah gue jelasin di permasalah 2; kaya gini

    terus kalau dailynya lebih dikit juga ada kasus seperti itu. solusi gimana
  • lha ? :D

    makanya itu gw bilang ... harusnya ada relasi yg bener
    jadi tau bahwa "rencana ini" <-> "realisasi nya ini"

    mau dibuat kaya tampilan elo yg kedua itu bisa dibilang presentasi data elo salah

    dari gambar 1, itu bakal terbaca :
    rencana part name "mcm-612" saat dikerjakan jadi "mcm-507"
    rencana part name "mcm-638" saat dikerjakan jadi "mcm-508"

    padahal ndak ada hubungannya sama sekali
    bukan "mcm-612" jadi "mcm-507"
    tapi "mcm-612 & mcm-638" jadi "mcm-507 & mcm-508"
    begitu kan ?

    gambar 2 jadi terbaca :
    rencana part name "mcg 171" saat dikerjakan jadi "...", "...", "..."

    padahal bukan itu harusnya
    lha wong rencananya banyak, realisasi juga banyak

    itu yg gw bilang "presentasi data" / "penyajian data" nya salah



    kemungkinan terakhir ya tampilan table nya yg diubah
  • edited April 12
    oke berarti solusinya di inputan daily plan harus diinput juga part monthlynya gitu ? biar bisa jadi relasi ? atau ada solusi lain. soalnya kan ngga mungkin user harus melihat monthly plan yg diinput di awal bulan itu, memakan waktu.
    untuk gambar/ kasus kedua emang sering gitu, jadi misalkan monthly plannya di line 10 cuman "mcg 171" ternyata stok habis maka itu daily plannya ada 3 part yg beda.

    terus kalau table diubah gimana maksudnya ?
  • tampilan table nya disatukan per field yg emang 1 kelompok LineID yg sama

    kira-kira kaya begini :



    jadi antar part name ndak ada garis
    mau ndak mau orang bacanya juga itu satu kelompok
    satu kelompok rencana, hasilnya juga satu kelompok realisasi
  • nah gitu malah nggak papa, dari hasil kodingan gue ini kira kira dirubah ke gimana https://pastebin.com/4Jy1G9yy
  • ntar dulu ...

    yg jadi masalah remark nya :D
    elo maunya gimana ?

    kalo masalah data nya, ok, bisa kaya di atas
    data elo bukan multi line
    bisa gampang dibaca

    tapi beda ama remark elo
    itu bisa multi line, tanpa garis jadi susah bacanya
    ndak ada pemisah antar kalimat

    mau tetep ada garis pemisah tiap remark ?
    ini berarti elo di kolom yg lain pake rowspan

    atau ndak masalah juga tanpa garis ?
    ini malah gampang, semua cuma pake <br>
  • edited April 13
    kalau dibuat kaya gini nggabisa ya ?

    terus ini contoh monthly plannya lebih banyak

    Kira kira bisa ngga kaya gitu ? kalau nggabisa cara yg loe usulin gimana. Need help banget
  • edited April 16
    ini belum solved, kira kira gimana ya, ini query gue yang gue pisah pisah https://db-fiddle.com/f/2bA7StrBpz18tLFgAQh2QV/4

    ini kodingan gue : https://pastebin.com/4Jy1G9yy
  • edited April 16
    ini elo pahami sendiri, gw lagi banyak kerjaan

    query gw pake model gw yg terakhir
    dgn model tampilan kaya yg gw bilang

    kalo masalah tampilan ...
    intinya cuma jumlah baris yg akan digabung (rowspan) harus bisa didapatkan sebelum echo kolom pertama

    pahami sendiri, gw ndak sempat jelasin
    <?php
    $db=mysqli_connect('localhost', 'root', '', 'test') or die(mysqli_connect_errno().': '.mysqli_connect_error());
    $qry=mysqli_query($db,
    'SELECT
    a.IdBukti,
    a.LineID,
    a.Tanggal,
    GROUP_CONCAT(DISTINCT CONCAT(a.PartID,"#&#",a.QtyPlanning) ORDER BY a.PartID SEPARATOR "#$#") AS monthly,
    GROUP_CONCAT(DISTINCT CONCAT(b.PartID,"#&#",b.QtyPlanning) ORDER BY b.PartID SEPARATOR "#$#") AS daily,
    GROUP_CONCAT(DISTINCT CONCAT(b.PartID,"#&#",b.keterangan) ORDER BY b.PartID SEPARATOR "#$#") AS remark
    FROM
    trans_ppicbdt_dt a
    LEFT JOIN
    trans_ppich b
    ON
    b.LineID=a.LineID
    AND b.tanggal=a.Tanggal
    AND b.DivisiId=a.DivisiId
    AND b.IdLocation=a.IdLocation
    WHERE
    a.Tanggal = "2018-04-11"
    AND a.DivisiId="DI070"
    AND a.IdLocation="1"')
    or die(mysqli_errno($db).': '.mysqli_error($db));

    echo '<style>.tbcellspacing{clear:both;padding:3px 0;}</style>';

    echo '<table border=1>';
    echo '<tr><td>IdBukti</td><td>LineID</td><td>Tanggal</td><td>PartID</td><td>QtyPlanning</td><td>PartID</td><td>QtyPlanning</td><td>Remark 1</td><td>Remark 2</td></tr>';
    echo '<tr valign=top>';

    while($rec=mysqli_fetch_assoc($qry)) {

    $daily = explode('#$#',$rec['daily']);
    $monthly = explode('#$#',$rec['monthly']);
    $remark = explode('#$#',$rec['remark']);
    $rowspan = count($daily)>count($monthly) ? count($daily) : count($monthly);

    echo '<td'.($rowspan>1?' rowspan='.$rowspan:'').' align=center>'.$rec['IdBukti'].'</td>';
    echo '<td'.($rowspan>1?' rowspan='.$rowspan:'').' align=center>'.$rec['LineID'].'</td>';
    echo '<td'.($rowspan>1?' rowspan='.$rowspan:'').' align=center>'.$rec['Tanggal'].'</td>';

    $PartID = $QtyPlanning = array();
    foreach($monthly as $idx => $val) {
    list($PartID[],$QtyPlanning[]) = explode('#&#',$val);
    }
    echo '<td'.($rowspan>1?' rowspan='.$rowspan:'').' align=center>'.implode('<div class="tbcellspacing"></div>',$PartID).'</td>';
    echo '<td'.($rowspan>1?' rowspan='.$rowspan:'').' align=right>'.implode('<div class="tbcellspacing"></div>',$QtyPlanning).'</td>';

    $PartID = $QtyPlanning = array();
    foreach($daily as $idx => $val) {
    list($PartID[],$QtyPlanning[]) = explode('#&#',$val);
    }
    echo '<td'.($rowspan>1?' rowspan='.$rowspan:'').' align=center>'.implode('<div class="tbcellspacing"></div>',$PartID).'</td>';
    echo '<td'.($rowspan>1?' rowspan='.$rowspan:'').' align=right>'.implode('<div class="tbcellspacing"></div>',$QtyPlanning).'</td>';

    $PartID = '';$Remark = array();
    foreach($remark as $idx => $val) {
    list($PartID,$Remark[]) = explode('#&#',$val);
    }
    echo '<td'.($rowspan>1?' rowspan='.$rowspan:'').' align=center>'.implode('<div class="tbcellspacing"></div>',$Remark).'</td>'; // hasilnya Remark 1

    echo '<td align=left>'.$Remark[0].'</td>'; // hasilnya 1 record awal Remark 2 ...

    echo '</tr>';

    for($i=1;$i<count($Remark);$i++) { // hasilnya sisa record Remark 2 ...
    echo '<tr valign=top><td>'.$Remark[$i].'</td></tr>';
    }

    }

    echo '</table>';
    ?>
  • edited April 18
    Kalau menjumlahlan kaya gambar ini gimana, ini gambar gue pakai kodingan gue. tapi yg total daily plannya ngaco

    ini kodingan gue ada yg salah ngga ? https://pastebin.com/ar70VZ5H
  • edited April 18
    kalo dari koding gw terakhir ...
    ...
    ...
    $totalMonthly=$totalDaily=0;
    while($rec=mysqli_fetch_assoc($qry)) {
    ...
    ...
    foreach($monthly as $idx => $val) {
    list($PartID[],$QtyPlanning[]) = explode('#&#',$val);
    }
    $totalMonthly+=array_sum($QtyPlanning);
    ...
    ...
    foreach($daily as $idx => $val) {
    list($PartID[],$QtyPlanning[]) = explode('#&#',$val);
    }
    $totalDaily+=array_sum($QtyPlanning);
    ...
    ...
    }
    ...
    ...
    $totalMonthly & $totalDaily tinggal elo echo
Sign In or Register to comment.