PHP test uygulamasında soru ve seçenekleri listeleme sorunu
Merhaba,
Bir test uygulaması geliştiriyorum ama soru ve seçenekleri listeleme sorun yaşıyorum. Desteğiniz için şimdiden teşekkürler.
// Veritabanı
Tablo adı : questions // Sınav başlıkları tutuluyor
Tablod adı : questions_all // tüm soruların tutulduğu tablo
Tablo adı : questions_option // Soruların seçenekleri
// params
"quesID" ile sınav başlığını, soruyu ve seçeneklerini birbirine bağlıyorum
"optionID" ile soru ve seçenekleri birbirine bağlıyorum.
// SQL
$list = $_db->query("SELECT*FROM questions");
foreach($list->results() as $value){
$quesID = $value->quesID;
$list2 = $_db->query("
SELECT*FROM questions_all as qa
INNER JOIN questions_option as qo
ON qa.quesID = qo.quesID
WHERE qa.quesID = '$quesID' AND qa.optionID = qo.optionID
");
}
// parametreler geliyor
Sonuç sınav başlığını ve 1 soru ve seçenekleri listeleniyor. Fakat bir sınav başlığına ait 3 soru ve seçenekleri listelenmiyor. Neden olabilir?
Foreach döngüsü olarak söylemeyin; denedim ondan da son datayı döndüyor.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
kısa kullanımdan kaynaklanmış olabili
$list2 = $db->query("SELECT * FROM oturum AS qa INNER JOIN ziyaretciler AS qo ON (qa.id = qo.id)");
$liste2 = $list2->fetchAll(PDO::FETCH_ASSOC);
echo "<pre>Sonuç \n";
print_r($liste2);
echo "</pre>";
bu veritabanı sonucu:
https://prnt.sc/AS6Rqt8WBiuH
bu da php:
https://prnt.sc/9p28FvoUFlje
not: yapıştırırken tablo adlarını değiştirmeyi unutma
SELECT * FROM
questions_all as qa
INNER JOIN questions_option as qo
ON (qa.quesID = qo.quesID)
burada zaten iki tabloyu id değerleri ile birleştiriyorsun, daha sonrasında where de bu iki kolonu birbirine eşitlemen gerekmez. ayrıca foreach'ın içerisinde değil öncesinde sql kullanman lazım, çıktıyı zaten dizi olarak verecek sana. Ayrıca tek bir sorgulama yapmışsın. PDO'nun kullanımına buradan bakabilirsin; http://www.erbilen.net/pdo-kullanimi/
doğru kullanım
$list2 = $_db->query(
"SELECT * FROM questions_all AS qa INNER JOIN questions_option AS qo ON (qa.quesID = qo.quesID)",
PDO::FETCH_ASSOC);
print_r($list2)
edit: sql kodunu veritabanında çalıştır dönen değerleri gör ve ona göre where belirle, eğer belirlemek istiyorsan. son olarak * ile sorgu yapma. sadece ihtiyacın olan kolonları seç. kod yazmayı öğrendikten sonra, daha kalitelisini yazmaya kendini zorla.