PHP PDO meninggalkan tabel gabungan yang bidangnya tidak cocok

Saya sedang membuat kuis untuk klien yang ingin hasil kuisnya disimpan secara otomatis dan saya mengalami masalah, saya mencoba memilih semua pertanyaan yang belum dijawab pengguna dalam kuis tertentu, saya menyimpan hasil setiap pertanyaan yang telah dijawab ke tabel RESULTS tetapi pernyataan saya kacau ketika lebih dari satu pengguna mendapatkan hasil di tabel RESULTS, jika ada yang bisa melihat kode saya dan memberi saya saran, itu akan sangat membantu dihargai. Terima kasih sebelumnya!

Berdasarkan tabel dan pernyataan ini, pertanyaan berikutnya yang perlu saya muat adalah que_id = 3 untuk use_id = 1 tetapi masalah yang saya hadapi adalah mengembalikan que_id = 1 dan que_id = 3 karena dijawab oleh pengguna use_id = 2 dan use_id 3, sekali lagi terima kasih!

TABEL PERTANYAAN

que_id qui_id que_question que_ans_id
1      1      lorem 1?     1
2      1      lorem 2?     6
3      1      lorem 3?     12

TABEL HASIL

res_id res_use_id res_qui_id res_que_id res_ans_id
1      1          1          1          2
2      1          1          2          6
3      2          1          3          10
4      3          1          1          1

PHP

$statement_question = $db->prepare("SELECT * FROM roa_quiz
                                    LEFT JOIN roa_questions ON qui_id = que_qui_id
                                    LEFT JOIN roa_results ON que_id = res_que_id
                                    WHERE qui_id = :qui_id AND res_use_id != :use_id");

$statement_question->setFetchMode(PDO::FETCH_ASSOC); 

$statement_question->execute(array(':qui_id' => 1, ':use_id' => 1));

$question = $statement_question->fetch();

person Mitchell Layzell    schedule 29.06.2013    source sumber


Jawaban (2)


Anda mencoba mendapatkan baris yang tidak cocok. Idenya adalah menggunakan left outer join untuk mendapatkan baris yang cocok. . . dan kemudian periksa di mana tidak ada kecocokan. Hal ini memerlukan dua hal: (1) memindahkan kondisi ke klausa on dan (2) memeriksa apakah ada kecocokan di klausa where:

SELECT *
FROM roa_quiz LEFT JOIN
     roa_questions
     ON qui_id = que_qui_id LEFT JOIN
     roa_results
     ON que_id = res_que_id and res_use_id = :use_id
where qui_id = :qui_id AND results.res_que_id is null
person Gordon Linoff    schedule 29.06.2013
comment
Terima kasih banyak masuk akal! - person Mitchell Layzell; 30.06.2013

Saya akan menggunakan sql:

SELECT * FROM roa_quiz
JOIN roa_questions ON qui_id = que_qui_id
LEFT JOIN roa_results ON que_id = res_que_id AND res_use_id = :use_id
WHERE qui_id = :qui_id
AND res_id IS NULL

Itu akan memberi Anda daftar pertanyaan yang belum terjawab untuk pengguna untuk kuis. Lihat di sini untuk beberapa diagram berguna tentang sql bergabung. Dalam hal ini kita memerlukan gabungan luar kiri, dengan pengecualian.

person WayneC    schedule 29.06.2013