Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

2 tablodan karşılaştırıp nasıl veri çekebilirim?

Konu, 'SQL' kısmında uyksuz tarafından paylaşıldı.

Etiketler:
  1. uyksuz

    uyksuz Yeni Üye

    Kayıt:
    31 Mayıs 2017
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    Merhaba arkadaşlar kendimi geliştirmek için bir plartform yapmaya çalışıyorum ama sql konusunu bir türlü geçemedim 2 tane tablom var bu bir online soru cevap şeklinde birinci tabloda sorular var ikinci tabloda ise kullanıcıların verdiği cevaplar ben istiyorum ki kullanıcıların tekrar siteye girdiğinde yanlış cevapladığı sorular tekrar sorulsun doğru cevapladıkları ise gözükmesin bir türlü beceremedim aşağıya tablonun bilgilerini yazıcam cevaplarsanız teşekkür ederim.
    soru tablom:
    idsoruabcdedogrucevap
    kullanıcıların cevapları


    idsorunokullaniciIdverdigicevapdogrucevap
     
  2. uyksuz

    uyksuz Yeni Üye

    Kayıt:
    31 Mayıs 2017
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    yok mu bir bilen ?
     
  3. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    903
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    bilen çokturda, sorunun sorma kalitesi ve soruyu soranın tavrına göre uğraşmak isteyen çıkmayabilir.

    bunu dene
    SELECT *
    FROM tblSorular AS a, tblCevaplar AS b
    WHERE a.id = b.id
    AND b.verdigicevap != a.dogrucevap
     
  4. mermer

    mermer Üye

    Kayıt:
    6 Haziran 2017
    Mesajlar:
    48
    Beğenilen Mesajlar:
    5
    Şehir:
    istanbul
    tabloda normalizasyon yok. kullanıcının verdiği yanıt tablosunda doğru yanıta tekrar yer verilmiş.

    şöyle birşey mi olacak ?

    create table sorular
    (
    soru_ID int primary key,
    soru nvarchar(MAX) not null
    )

    // Bana göre şıklar ayrı tabloda olmalı, neden her şık satırında ayrıca doğruŞık durumu belirtilmeli, çünkü bazen doğru olan şıklar verilip yanlışı sorulur.

    create table şıklar
    (
    şık_ID int primary key,
    soru_ID int not null foreign key references sorular(soru_ID),
    doğruŞık BIT not null,
    yanit nvarchar(MAX) not null
    )

    create table Yanıtlar
    (
    yanıt_ID int primary key,
    kullanıcı_ID int not null foreign key references kullanıcılar(kullanıcı_ID),
    soru_ID int not null foreign key references sorular(soru_ID),
    seçtiğiŞık_ID int not null foreign key references şıklar(şık_ID)
    )

    sorgu için sayın SedirAğacı nın benzeri bir sorgu kullanılabilir... tabii şık için ayrıca bir düzeltme istiyor :)
     
  5. uyksuz

    uyksuz Yeni Üye

    Kayıt:
    31 Mayıs 2017
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    @mermer
    Abi yardımın için teşekkür ederim, kaç gündür bulamadım tıkanıp kaldım. Sedir ağacı'nın yazdığı sorguyu denedim olmadı. Kullanıcı açısından hiçbir sıkıntı yok herşey tıkır tıkır çalışıyor ama sorguyu halledemedim tabloyu değiştirmeden yapmak mümkün mü acaba abi istersen teamwiever id şifre vereyim bir gelip bakarsan sevinirim.


    [​IMG]

    [​IMG]

    [​IMG]
     
    Son düzenleme: 6 Haziran 2017
  6. mermer

    mermer Üye

    Kayıt:
    6 Haziran 2017
    Mesajlar:
    48
    Beğenilen Mesajlar:
    5
    Şehir:
    istanbul
    1) yıldız dersen, doğru yanıtı da getirmiş olursun, onun için select (*) yıldız dememelisin. soru numarası (id) ile belirtiliyorsa yazarsın aşağıdaki gibi, geremezse, id yi de ekleme sorguya.

    2) verilen yanitlar için yanit isminde bir tablo kullandığını düşündüm. değilse değiştir.

    3) yanit tablosundaki soruno nun soru tablosunun id sine karşılık geldiğini düşünüyorum. (öyle olmalı çünkü)

    4) hangi kullanıcı login olduysa koşul parametresine kullaniciID = @kullaniciID değişkenini argüman olarak yolla.

    select id, a, b, c, d, e from soru where id = (select soruno from yanit where kullaniciId = @kullanici AND (verdigicevap != dogrucevap))

    bak yukarıdaki ilk sorgunun where koşulunu dolduran ikinci select sorgusunu parantezler içine aldım. bu parantezlere dikkat et. syntax hatası alma.

    5) bak burada bir husus var, önemli, daha önce soru sonrası ya da öncesi (normalizasyon yok dediğim bu idi) soru tablosunda doğru yanıta yer verilmiş, kullanıcı yanlış bir yanıtı işaretlediğinde ya o anda ya da daha öncesinde soru tablosundaki doğrucevap sutünuna doğru yanıtın insert edilmesi gerekir. doğrucevap satırı boş ise sorgu çalışmaz. bir bak bakalım soru tablosunda doğrucevap sutünu dolu mu ?

    dolu değilse join li bir sorgu yazacağım sana :) derdine ilaç olacak :)
     
  7. uyksuz

    uyksuz Yeni Üye

    Kayıt:
    31 Mayıs 2017
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    İyi geceler abi dediğin gibi yaptım sorguyu çalıştırdım ama sadece kullanıcının yanlış cevapladığı soruyu çektim diğer cevaplanmamış soruları çekemedim abi aşağıya tabloların resmini ekliyorum bakıp yardımcı edersen sevinirim ilgilendiğin için de teşekkür ederim :)
    Cevap tablosu

    2.JPG
    soru tablosu

    1.JPG
    Burasıda sorguyu çalıştırdığım yer:

    3.JPG
    Tekrar teşekkür ederim :D
     
  8. mermer

    mermer Üye

    Kayıt:
    6 Haziran 2017
    Mesajlar:
    48
    Beğenilen Mesajlar:
    5
    Şehir:
    istanbul
    cevaplanmamış sorular ? verdiği cevap sutünunu boş mu bırakıyorsun ? yanıtı atladığını hangi işaretle anladığına göre değişecek bu durum null ise verdiği yanıt;

    select id, a, b, c, d, e from soru where id = (select soruno from soru where kullanıcıID = @kullanıcı AND ((dogrucevap != verdigicevap) OR (is null verdigicevap)))

    buradaki parantezlere dikkat et derim.

    demen gerekir.

    ama, null ise, yanıtı boş bıraktığında ise...

    eğer boş bırakmayı 'boş' diye insert ediyorsan (ki bilmiyorum keşke ekleseydin) o vakit OR (is null verdigicevap) yerine OR (verdigicevap = 'boş') diyebilirsin.
     
  9. mermer

    mermer Üye

    Kayıt:
    6 Haziran 2017
    Mesajlar:
    48
    Beğenilen Mesajlar:
    5
    Şehir:
    istanbul
    yukarıdaki yazıyı düzeltmiyorum, yeni bir tane daha ekliyorum, sonradan yazdığın "atladığı sorular" konusu diğer olasılıkları da düşündürdü.

    zaten atladığı sorular varsa iki şarta gerek yok, doğru yanıtladığı dışındaki herşey gözükecek demektir.

    select id, a, b, c, d, e from soru

    where id = (select id from yanit where kullanıcıID = @kullanıcı AND (NOT doğrucevap = verdiğicevap)) yeterli.

    ama performansı bir üstteki sorguya göre belirgin derecede düşüktür. haberin olsun. diğerini öneririm donanım kaynakları kısıtlı ise.

    takıldığın diğer konularda da (php dışında) sor bana. yardımcı olmayı severim.
     
    Son düzenleme: 7 Haziran 2017
  10. uyksuz

    uyksuz Yeni Üye

    Kayıt:
    31 Mayıs 2017
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    iyi akşamlar yine olmadı abi sorgu sadece yanlış cevaplanmış soruları çekiyor hiç cevaplanmamış soruları çekmiyor. abi toplu bir şekilde yollamıyorum soruların cevaplarını javascript(ajax) ile tek tek yolluyorum o yüzden boş bir kayıt yollanması imkansız oluyor yardımcı olursanız çok sevinirim teşekkür ederim :)

    @mermer

    Ekran Alıntısı.JPG
     
  11. mermer

    mermer Üye

    Kayıt:
    6 Haziran 2017
    Mesajlar:
    48
    Beğenilen Mesajlar:
    5
    Şehir:
    istanbul
    kullanıcının bir soruyu yanıtlamadığını nasıl anlıyorsun ?
    tabloya bir veri insert ederek mi ?
    mesela 10. soruyu geçti, 10. soru hakkında verdiği yanıt için ne diyorsun tabloya ?
     
  12. uyksuz

    uyksuz Yeni Üye

    Kayıt:
    31 Mayıs 2017
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    Abi onuncu soru hakkında hiçbir kayıt yapılmıyor o zaman eğer cevap verilmezse yapılması gerekir mı peki ? :)

    LG-D855 cihazımdan Tapatalk kullanılarak gönderildi
     
  13. mermer

    mermer Üye

    Kayıt:
    6 Haziran 2017
    Mesajlar:
    48
    Beğenilen Mesajlar:
    5
    Şehir:
    istanbul
    kullanıcı soruyu yanıtlamaz, boş geçerse, daha sonra o soruyu tekrar ona sunabilmek için tabii ki insert edilmesi gerekecektir.

    yanlış yanıtını kayıt ediyorsun ve yanlış yanıtladığı soruyu gösteriyorsun.

    yanıtlamadığı, atladığı soruyu kayıt etmezsen nasıl bileceksin o soruyu boş geçip geçmediğini ?

    sorgular onun için çalışmıyor.

    yanıt - doğru yanıt
    b --------- c

    diyorsan boş geçtiğinde de
    yanıt - doğru yanıt
    0 ---------- c

    gibi bir veri insert etmelisin ki sorgular çalışsın.
     
  14. uyksuz

    uyksuz Yeni Üye

    Kayıt:
    31 Mayıs 2017
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
  15. mermer

    mermer Üye

    Kayıt:
    6 Haziran 2017
    Mesajlar:
    48
    Beğenilen Mesajlar:
    5
    Şehir:
    istanbul
    mobil cihazdan yanıtlıyorum.

    insert sorguları elinde mi ?

    internet arayüzünü sen mi tasarladın ?

    tasarladıysan kullanıcı soruyu atladığında

    insert yanit (verdigicevap)
    values (0) demen gerek.

    durum bu kadar basit.

    atladığı anda yukarıdaki insert sorgusu çalışacak.

    daha sonra yukarıda atladığı ve yanlış yanıtladığı sorguları (not verdigicevap = dogrucevap) şeklinde getir diyeceksin. o zaman çalışacak.

    şimdi sen insanlar soruyu yanıtlamadığında tabloya bir veri insert etmiyorsun, sonra "doğru yanıtladığı sorular dışındaki tüm soruları getir" (yani NOT dogruyanit = yanlisyanit) dediğinde sadece yanlış yanıtlanan sorular geliyor diyorsun. kayıt bulamıyor ki sistem.

    ajax ile boş geçtiğini yani soruyu atladığını server a ilettiğin vakit insert yanit (verdigicevap) values (0) diyeceksin ki yukarıdaki NOT sorgusu çalışacak.
     
  16. uyksuz

    uyksuz Yeni Üye

    Kayıt:
    31 Mayıs 2017
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    İnternet arayüzünü ben tasarladım abi tekrardan ajax sorgularını değiştiricem boş geçerse soruyu o soruyu '0' olarak göstericem bakalım o zaman nasıl olucak abi ben sana sonucu yazarım teşekkür ederim tekrardan uğraştırıyorum senide :(
    sitenin demosuda burada abi bakabilirsin yanlışım varsa düzeltirsin saygılar :)

    Soru - Portal
     
  17. mermer

    mermer Üye

    Kayıt:
    6 Haziran 2017
    Mesajlar:
    48
    Beğenilen Mesajlar:
    5
    Şehir:
    istanbul
    yani durumu şöyle özetleyebiliriz, kullanıcı soruyu yanıtlamadığında sistemin sanki hayali bir şık varmış gibi "hatalı şıkkı yani 0 (sıfır) şıkkını seçecek"
     
  18. uyksuz

    uyksuz Yeni Üye

    Kayıt:
    31 Mayıs 2017
    Mesajlar:
    18
    Beğenilen Mesajlar:
    0
    Şehir:
    ankara
    sitenin demosuda burada abi bakabilirsin yanlışım varsa düzeltirsin saygılar :)

    Soru - Portal

    // Sadece KPSS LİSE düzeyinde içerik var abi diğerleri boş diğerlerini seçme :)
     
  19. mermer

    mermer Üye

    Kayıt:
    6 Haziran 2017
    Mesajlar:
    48
    Beğenilen Mesajlar:
    5
    Şehir:
    istanbul
    çok basit, soruyu atladığı zaman da şık işaretlemiş gibi işlem yapacaksın. şık işaretleme işlemin nasılsa, bu kullanıcı soruyu atladığında da çalışacak ve 0 (sıfır) şıkkını seçecek.
     
  20. mermer

    mermer Üye

    Kayıt:
    6 Haziran 2017
    Mesajlar:
    48
    Beğenilen Mesajlar:
    5
    Şehir:
    istanbul
    atladığı sorulardan puan kırmak istemiyorsan, ki puanlama sistemin var mı bilmiyorum, puanlama işleminde (NOT verdiğiYanıt = 0) diyeceksin. yanlış ve doğrular üzerinden puanlama yapacak sistem.