v2.5.2
Giriş yap

PHP test uygulamasında soru ve seçenekleri listeleme sorunu

siyahkalem
359 defa görüntülendi

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.

Cevap yaz
Cevaplar (3)
munzevi
727 gün önce

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

siyahkalem
727 gün önce

Maalesef, söylediğiniz gibi olmadı.

munzevi
727 gün önce
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.