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

Mendapatkan nilai true dari 2 tabel berbeda

Sore teman2..

saya ada masalah nich dengan pencocokan jawaban user dengan kunci jawaban. seperti gambar di bawah ini ada 2 buah tabel yaitu:

1) tabel kunci jawaban
2) tabel jawaban user



image
Dari tabel kunci jawaban terdapat satu pertanyaan dengan 2 jawaban yang background kuning. untuk mendapatkan nilai true kedua jawaban harus benar, dan jika hanya benar satu saja maka semua jawaban yg di background kuning salah.

Pertanyaannya gimana ya caranya agar diketahui jika satu saja jawaban salah yg background kuning maka tidak di hitung jawaban yang kedua walau misalnya jawabannya benar, atau sebaliknya.


Mohon pencerahaannya...


Tanggapan

  • ID_p2 itu apa ya ?
    relasi nya dengan table jawaban user dengan field apa ?
  • edited November 2012
    sori, saya salah saya salah buat tabelnya ini yang bener mas... Jadi relasi di dapat dari ID_pertanyaan dan ID_p2.. misalnya pertanyaan pertama memiliki 2 buah jawaban spt background kuning dan jika pertama salah maka jawaban kedua benar maka tetap dianggap salah.


    image
  • edited November 2012
    SELECT
    b.username, b.id_pertanyaan
    , GROUP_CONCAT( CONCAT ( a.ID_p2 , a.jawaban ) ORDER BY a.ID_p2 ASC SEPARATOR "" ) as kunci
    , GROUP_CONCAT( CONCAT ( b.ID_p , b.jawaban_user ) ORDER BY b.ID_p ASC SEPARATOR "" ) as jawab
    FROM tbl_jawab b
    LEFT JOIN tbl_kunci a ON b.id_pertanyaan = a.id_pertanyaan AND b.ID_p = a.ID_p2
    GROUP BY b.username,b.id_pertanyaan
    ORDER BY b.username,b.id_pertanyaan

    coba jalanin dolo query di atas, lihat hasilnya
    coba dipikirkan gimana ambil keputusan TRUE nya
  • SELECT
    b.username, b.id_pertanyaan
    , GROUP_CONCAT( CONCAT ( a.ID_p2 , a.jawaban ) ORDER BY a.ID_p2 ASC SEPARATOR "" ) as kunci
    , GROUP_CONCAT( CONCAT ( b.ID_p , b.jawaban_user ) ORDER BY b.ID_p ASC SEPARATOR "" ) as jawab
    FROM tbl_jawab b
    LEFT JOIN tbl_kunci a ON b.id_pertanyaan = a.id_pertanyaan AND b.ID_p = a.ID_p2
    GROUP BY b.username,b.id_pertanyaan
    ORDER BY b.username,b.id_pertanyaan

    coba jalanin dolo query di atas, lihat hasilnya
    coba dipikirkan gimana ambil keputusan TRUE nya
    Untuk querynya udah bisa saya mas, yang ingin saya tanyakan dari post ini, gimana caranya mencari nilai true jika dalam satu pertanyaan ada 2 jawaban dan jika salah satu jawaban salah maka jawaban yg benar di anggap salah. saya coba gambarkan lewat gambar berikut
    image
  • edited November 2012
    Untuk querynya udah bisa saya mas
    query nya sama gak ama query gw ?
    kalo beda ... tinggal coba aja napa ...

    kan bisa dilihat sendiri hasilnya, sama atau beda dgn query situ

    lalu dari hasil query yg gw tunjukin ...
    masa ndak bisa menyimpulkan sendiri, nilai TRUE jika bagaimana ?

    kalo ndak paham, posting kemari hasil query dr query yg gw tunjukin ...



    kalo dr komen elo yg terakhir, gw cuma bisa menyimpulkan, query dr gw kagak elo coba
  • untuk query saya pake perintah CASE mas.... hasilnya spt gambar yang saya attach di atas...
  • edited November 2012
    query gw dicoba aja napa ? kok susah amat ... :-w

    liat sendiri hasilnya

    kalo query situ justru bikin masalah jadi panjang, kenapa gak dibongkar saja ?
  • edited November 2012
    ni masih mencoba mas... hasil querynya masih kosong... 
  • mana ?


    nih snapshot ...

    image

    jangankan cuma 5 jawaban 1 pertanyaan
    10 jawaban 1 pertanyaan aja, kalo 1 jawaban salah tau kalo FALSE
  • Untuk memanggil hasil querynya seperti biasa ya mas?? saya belum pernah menggunakan GROUP_CONCAT() :(

    sori lo saya menyebalkan mas, bener2 new bie ne...


  • edited November 2012
    sama aja

    gini ajalah, mana table na ? posting kemari ...

    lalu mana query yg dibuat ? posting kemari ...
  • edited November 2012
    Ini query yg di berikan mas, dengan beberapa tambahan: tabel:
    image


    $sql= mysql_query("SELECT b.user, b.ID_quest
    , GROUP_CONCAT( CONCAT ( a.ID_op , a.kunci ) ORDER BY a.ID_op ASC SEPARATOR '') as kunci
    , GROUP_CONCAT( CONCAT ( b.ID_ob , b.ID_jwbn ) ORDER BY b.ID_ob ASC SEPARATOR '') as jawab
    FROM ".Apt_Answer." b
    LEFT JOIN ".Apt_Key." a ON b.ID_quest = a.ID_q AND b.ID_ob = a.ID_op where b.ID_user='".$id_user."' AND b.ID_cat='".$data_subcat->id."' 
    GROUP BY b.user,b.ID_quest
    ORDER BY b.ID_quest");
    while($qa=mysql_fetch_array($sql)){
    echo $qa['ID_jwbn'];

    }

    hasilnya kosong mas?? salahnya di mana ya?



  • table na mana ?
  • saya udah isi tabel mas post yg di atas... mohon kereksinya untuk querynya...
  • edited November 2012
    SELECT
    b.user
    , b.ID_quest
    , GROUP_CONCAT( CONCAT ( a.ID_op , a.kunci ) ORDER BY a.ID_op ASC SEPARATOR '') as kunci
    , GROUP_CONCAT( CONCAT ( b.ID_ob , b.ID_jwbn ) ORDER BY b.ID_ob ASC SEPARATOR '') as jawab

    FROM ".Apt_Answer." b

    LEFT JOIN ".Apt_Key." a ON b.ID_quest = a.ID_q AND b.ID_ob = a.ID_op

    WHERE b.ID_user='".$id_user."' AND b.ID_cat='".$data_subcat->id."' 

    GROUP BY b.user,b.ID_quest

    ORDER BY b.ID_quest

    yg gw merahin, mana ada field itu di table nya ?
    query nya tinggal benerin yg merah itu doang

    kalo masalah tarik datanya ...

    echo $qa['ID_jwbn'];

    mana ada ID_jwbn ?
    field itu di table emang ada, dipake di query emang iya ... tapi bukan OUTPUT query nya
    output query yg gw biru-in
  • OK mas saya coba ya. Untuk b.user posisinya di sebelah ID_user untuk menampung session dari user yang login mas, isinya berupa email address.
  • mau bikin field baru ? buat apaan ... pake ID_user saja napa ...


  • mau bikin field baru ? buat apaan ... pake ID_user saja napa ...
    Iya mas, saya pake ID_user aja.

    Hasil querynya masih kosong ya mas, apanya yang salah saya ya..:(

    saya sudah mengganti b.user dengan b.ID_user dan sudah memanggil output yg mas boo kasi warna biru

    untuk output dari query saya buat spt contoh dari mas bo:

    <table>
            <td width="260px">id pertanyaan</td>
            <td width="260px">kunci jawaban</td>
            <td width="260px">jawaban user</td>
    <td>True/False</td>

    </tr>
    .......
    <? while($qa=mysql_fetch_array($sql)){?>
     <td><?php echo $qa['ID_quest'];?></td>
                    <td><?php echo $qa['kunci'];?></td>
                    <td><?php echo $qa['jawab'];?></td>
                    <td></td>

    <? } ?>
    </table>
  • edited November 2012
    query nya sekarang jadi spt apa ?



    tolong, biar cepet dapet solusi, kalo masih bermasalah, selalu sertakan bagian query nya
  • btw, gw baru liat ini :

    SELECT
    b.user
    , b.ID_quest
    , GROUP_CONCAT( CONCAT ( a.ID_op , a.kunci ) ORDER BY a.ID_op ASC SEPARATOR '') as kunci
    , GROUP_CONCAT( CONCAT ( b.ID_ob , b.ID_jwbn ) ORDER BY b.ID_ob ASC SEPARATOR '') as jawab

    FROM ".Apt_Answer." b

    LEFT JOIN ".Apt_Key." a ON b.ID_quest = a.ID_q AND b.ID_ob = a.ID_op

    WHERE b.ID_user='".$id_user."' AND b.ID_cat='".$data_subcat->id."' 

    GROUP BY b.user,b.ID_quest

    ORDER BY b.ID_quest

    yg gw hijau-in itu apa ya ?
    concatenate variabel gak kaya gitu ... kalo itu nama table, ya ndak perlu di concat

  • edited November 2012
    itu define dari nama tabelnya mas bo...

    Apt_Answer : tabel apt_answer
    Apt_Key : tabel apt_key

    iya mas boo itu nama tabel. berarti perintah sqlnya gak usah di isiin
    GROUP_CONCAT( CONCAT );
    CONCATNYA
    gak perlu ya, soalnya saya baru pertama kali make prnth sql ini jadi bingung mas boo...

  • edited November 2012
    concat itu tetep perlu dipake ...

    logikanya :
    - CONCAT = gabungkan dulu sub_id dan kunci / jawaban nya, hasilnya semacam : 1A
    - GROUP_CONCAT = lalu gabungkan seluruh kunci dgn nomer pertanyaan yg sama, hasilnya semacam : 1A2B3C

    concat yg gw sebut di :
    "... concatenate variabel gak kaya gitu ... kalo itu nama table, ya ndak perlu di concat ..."
    itu lain cerita ...
    - CONCAT yg di query itu CONCAT nya database
    - concat / concatenate di script itu concat nya PHP

    mana query nya ?

    gw kan sudah bilang :
    "tolong, biar cepet dapet solusi, kalo masih bermasalah, selalu sertakan bagian query nya"
    biar masalahnya gak jadi bertele-tele
  •                 $sql= mysql_query("SELECT
                            b.ID_user, b.ID_quest
                            , GROUP_CONCAT( DISTINCT a.ID_op , a.kunci ORDER BY a.ID_op ASC SEPARATOR '') as kunci
                            , GROUP_CONCAT( DISTINCT b.ID_ob , b.ID_jwbn  ORDER BY b.ID_ob ASC SEPARATOR '') as jawab
                            FROM ".Apt_Answer." b
                            LEFT JOIN ".Apt_Key." a ON b.ID_quest = a.ID_q AND b.ID_ob = a.ID_op WHERE b.ID_user='".$id_user."' AND
                            ID_cat='".$data_subcat->id."'
                            GROUP BY b.ID_user,b.ID_quest
                            ORDER BY  b.ID_user,b.ID_quest");

                            while($d=mysql_fetch_array($sql)){


    } ?>

    hasilnya spt gambar di bawah mas boo saya coba pake XAMMP:

    image
  • edited November 2012
    gitu juga bisa ... sudah bener hasilnya

    tinggal bandingin doang, mana jawaban yg bener, mana yg salah ...
    masa ndak bisa ?

    logikanya :
    IF kunci jawaban == jawaban user THEN nilai = 1 ELSE nilai = 0

    lihat id pertanyaan 21
    IF "522535" == "523533" THEN nilai = 1 ELSE nilai = 0

    apa "522535" sama dengan "523533" ?
  • mas boo:

    untuk id pertanyaan 21 :
    jawaban user : 33
    kunci jawaban: 24

    mas untuk id pertanyaan 22 :
    jawaban user : 33
    kunci jawaban: 42

    mas untuk id pertanyaan 23 :
    jawaban user : D
    kunci jawaban: C

    Jadi tinggal di bandingkan ya mas dari hasil query di atas tanpa harus mencari spt yang saya buat cetak tebal di atas mas boo??

  • untuk id pertanyaan 21 :
    jawaban user : 33
    kunci jawaban: 24

    kok bisa ?
    pan dari hasil query di atas :
    jawaban user : 523533
    kunci jawaban : 522535
    itu kalo dibandingin, nilai harus keluar : 0 ... soalnya gak sama

    33 dan 24 dari mana ?
  • edited November 2012
    SELECT
                            b.ID_user, b.ID_quest,b.ID_cat
                            , GROUP_CONCAT( DISTINCT a.ID_op , a.kunci ORDER BY a.ID_op ASC SEPARATOR '/') as kunci
                            , GROUP_CONCAT( DISTINCT b.ID_ob , b.ID_jwbn  ORDER BY b.ID_ob ASC SEPARATOR '/') as jawab
                            FROM ".Apt_Answer." b
                            LEFT JOIN ".Apt_Key." a ON b.ID_quest = a.ID_q AND b.ID_ob = a.ID_op where b.ID_user='".$id_user."' AND
                            b.ID_cat='".$data_subcat->id."'
                            GROUP BY b.ID_user,b.ID_quest
                            ORDER BY  b.ID_user,b.ID_quest");misalnya pertanyaan 21 mempunyai 2 opsi jawaban yang benar mas boo

    misalnya :
    Pepaya mengandung vitamin ?
    1) vit. A
    2) vit C
    3) vit D

    dari pertanyaan di atas ada 2 jawaban yg benar
    jawaban yang benar 1 dan 2.

    saya simpan jawaban user ke tabel apt_answer:
    ID pertanyaan | ID sub pertanyaan | Jawaban User | ID user login
         21                          1                              1                   10
         21                          2                              3                   10

    Untuk kunci jawaban apt_key
    ID pertanyaan | ID sub pertanyaan | Jawaban User
         21                          1                         1
         21                          2                         2

    jika user memilih satu 1 dan 3 maka jawaban di anggap salah. Jadi hasil query di atas untuk pertanyaan 21 seharusnya berupa : 33 dan kunci jawaban 24.

    Oya mas sya coba isi sparator untuk hasil querynya jadinya kayak gini dari pertanyaan 21 hasilx:

    522/535-> hasil query kunci jawaban->
    52=id sub pertanyaan 2 kunci jawaban pertama
    53=id sub pertanyaan 5 kunci jawaban kedua

    523/533-> hasil query jawaban user
    52=id sub pertanyaan 3 kunci jawaban pertama
    53=id sub pertanyaan 3 kunci jawaban kedua

    OK mas boo tq bantuannya, saya ubah sedikit perintah sqlnya dan hasilnya sudah mau cocok...

    Moga selalu memberikan solusi bg yg membutuhkan.. skl lagi trm kasih mas BOO...



  • edited November 2012
    kok ndak paham maksud gaw yak :)) ... tapi ya udahlah, yg penting sudah bisa ...
  • edited April 2013
    @mas boo boleh gak lanjutin threat ini tp masih menggunakan perintah group_concat :

    $sql= "SELECT
    b.ID_user, 
    b.ID_quest,
    b.ID_cat,
    b.ID_ob, 
    b.ID_jwbn,
    a.ID_op,
    a.ID_q,
    a.kunci,
    a.id_catkey,
    GROUP_CONCAT( a.kunci ORDER BY a.ID_op ASC ) as kunci,
    GROUP_CONCAT( b.ID_jwbn ORDER BY b.ID_ob ASC ) as jawab
    FROM tabel_inputjawaban b
    LEFT JOIN tabel_kuncijawaban a ON b.ID_quest = a.ID_q AND b.ID_ob = a.ID_op 
    LEFT JOIN tabel_kategoritanya c ON c.id_cq=a.id_catkey
    where b.ID_user='".$id_us."' 
    AND
    a.id_catkey='".$dcat['id_cq']."'
    AND
    b.ID_cat='".$e->id."' 


    GROUP BY b.ID_user,b.ID_quest,a.id_catkey
    ORDER BY b.ID_user,b.ID_quest,c.id_cq ASC";

    $sql_e= mysql_query($sql) or die(mysql_error());
    $n=0;

    while($nilaijawaban=mysql_fetch_array($sql_e)){
     $trueanswer=($nilaijawaban['kunci']==$nilaijawaban['jawab'])?"1":"0"; 

    .........

    $trueanswer untuk konversi jika nilainya benar dikonversi menjadi nilai 1. gimana ya caranya menjumlahkan $trueanswer itu pake array_sum ato bisa langsung di sqlnya pake perintah count. berikut saya kasi sample hasilnya berupa gambar [IMG]http://i38.tinypic.com/f1fh3n.jpg[/IMG] ;
     Yang warna biru hasil konversi $trueanswer, yang warna merah id dari database pengelompokan berdasarkan kategori pertanyaan..

  • edited April 2013
    define saja $trueanswer = array(); sebelum while()

    lalu, di dalam while() :
    $trueanswer[]=($nilaijawaban['kunci']==$nilaijawaban['jawab'])?1:0;

    setelah while(), baru bisa pake array_sum()
  • edited April 2013
    udah saya coba cuma nilai pengelompokan terakhir saja yang di dapat mas boo. dari gambar yang saya lampirkan di atas, itu jawaban untuk satu user saja, bagian yang di tandai warna biru dan merah ada 2 kelompok, jika di hitung manual yg ditandai warna biru dan merah totalnya 6 dan dibawahnya yang sudah ditandai nilainya 5. saya coba spt yg mas boo di atas saya coba echo hasilnya 5, seharusnya kan 6+5=11. yg saya mksd gimana biar didpat total dari nilai jawaban true berdasarkan kelompok id kategori pertanyaan.
  • gw kagak nangkep maksudnya ... kalo cuma melihat sepotong koding di atas ...

    bisa keluar hasil spt di gambar itu, koding yg dipake spt apa ?


  • aku juga nanya dong... apa bedanya ayam sama sapi..
  • mockie dodol ... dateng-dateng posting spam ... :))
  • saya yang salah mas boo... kondisi di sqlnya ada yang double...  postingan array_sum mas bo udah OK.. 

    TQ. bantuannya mas boo... ^:)^
Sign In or Register to comment.