• 01-05-2014, 17:44:22
    #1
    Merhaba arkadaşlar , tam olarak nasıl soracağımı bilemedim. Başlık konusunda şimdiden özür dilerim.

    Aşağıdaki resimde veritabanı tablolarım ve bir kaç içeriğim mevcut. ( normalde soru ve sebep içeriği bu resimdekilerden oldukça fazla )






    Tablolarda görüleceği üzere sorularım, sebeplerim, ve ilişki tablom mevcut.

    kişilik testi , problem tarama testi gibi testlerim var.

    Testleri ve sorulan soruları sırasıyla dolduran kullanıcı için en olası sonucu bulmaya çalışıyorum.
    örneğin kullanıcıya 15 adet soruyu yönelttim ve verdiği cevaplar (e=evet , h=hayır)
    aşağıdaki gibi olsun.

    1 h
    2 e
    3 h
    4 h
    5 h
    6 h
    7 h
    8 e
    9 e
    10 e
    11 e
    12 e
    13 e
    14 e
    15 e


    kullanıcının verdiği cevapları "soru_sebep_iliski" tablosuna göre incelediğimizde en çok uyan sebeplerden , en çoktan en aza doğru
    2 . okul
    6. kişilik
    1. sağlık & beden
    4. toplumsal
    3. aile

    sonucu çıkıyor yani en olası sebep " 2. okul "

    Bu sorulara aldığım cevaplara göre " 2. okul " sonucuna ulaşmak için ; gerek veritabanı sorgularımda gerekse php kısmında nasıl bir yöntem izlemeliyim acaba.

    Yardımcı olan, olmaya çalışan herkese teşekkürler.
  • 01-05-2014, 17:52:28
    #2
    Üyeliği durduruldu
    mysql ile yapıyorsun sanırım php kısmında çok yapılacak bişey yok. sql sorgusunu ve tablo yapısını doğru analiz edip en uygun sorguları çalıştırmak lazım. 3. tablonda sorular için birden fazla satıra veri girişi yapman ve en fazla tekrarlanan seçeneği bulup en olası sonuç olarak göstermen gerekiyor.
  • 01-05-2014, 21:23:23
    #3
    SELECT count(sebep_id) as sebepAdet
    FROM soru_sebep_iliskisi
    GROUP BY sebep_id
    ORDER BY sebebAdet;
    Bu sorgu size sorunların sebeplere göre çoktan aza listesini verir.
    Sebep adını da almak için

    SELECT sebep, count(sebep_id) as sebepAdet
    FROM sebepler, soru_sebep_iliskisi
    GROUP BY sebep_id
    ORDER BY sebebAdet 
    WHERE sebepler.id=soru_sebep_iliskisi.sebep_id;
    Test ediniz, akıldan test etmeden yazdım, ama mantık bu şekilde.
  • 02-05-2014, 10:09:56
    #4
    Yorumlar için teşekkürler.
    Deve adlı üyeden alıntı: mesajı görüntüle
    SELECT count(sebep_id) as sebepAdet
    FROM soru_sebep_iliskisi
    GROUP BY sebep_id
    ORDER BY sebebAdet;
    Bu sorgu size sorunların sebeplere göre çoktan aza listesini verir.
    Sebep adını da almak için

    SELECT sebep, count(sebep_id) as sebepAdet
    FROM sebepler, soru_sebep_iliskisi
    GROUP BY sebep_id
    ORDER BY sebebAdet 
    WHERE sebepler.id=soru_sebep_iliskisi.sebep_id;
    Test ediniz, akıldan test etmeden yazdım, ama mantık bu şekilde.

    mantığı anlamaya çalışıyorum
    peki iki veya daha fazla alanı sorguya nasıl dahil ederim

    yani şöyle bir durumda nasıl bir yol izlemeliyim.
    kullanıcıya 5 soru sorduk diyelim.
    1 e ---- ( sağlık & beden )
    2 e ---- ( okul | ev aile )
    3 h ---- ( ilişkisiz , işlem yok )
    11 e ---- ( okul | kişilik )
    13 e ---- ( okul | toplumsal | kişilik )

    bu örnekte görüldüğü üzere okul 3 sorunun sebepleri arasında ve en çok geçtiği için 1. sırada , 2. sırada ise kişilik geliyor.

    yani elimde var olan kullanıcı cevaplarını toplu bir şekilde sorguya dahil edebilir miyim.

    Yapmaya çalıştığım şuna benziyor aslında.
    matematikte farklı kümeler arasında "ortak küme" oluşturmaya benziyor.
    her soruda elimize farklı bir küme geçiyor bunlar arasındaki en çok elemanlı ortak kümeyi bulmaya çalışıyorum aslında


    yardımcı olan, olmaya çalışan herkese teşekkürler.
  • 02-05-2014, 15:22:18
    #5
    soru_sebep_iliski tablonuzdaki verileri bir diziye aktarın. Dizide hangi elemanın kaç kere tekrar ettiğini saydırın. En çok tekrar eden sonuç en alakalı sonuçtur.
  • 02-05-2014, 20:33:42
    #6
    uysal_rockci adlı üyeden alıntı: mesajı görüntüle
    Yorumlar için teşekkürler.



    mantığı anlamaya çalışıyorum
    peki iki veya daha fazla alanı sorguya nasıl dahil ederim

    yani şöyle bir durumda nasıl bir yol izlemeliyim.
    kullanıcıya 5 soru sorduk diyelim.
    1 e ---- ( sağlık & beden )
    2 e ---- ( okul | ev aile )
    3 h ---- ( ilişkisiz , işlem yok )
    11 e ---- ( okul | kişilik )
    13 e ---- ( okul | toplumsal | kişilik )

    bu örnekte görüldüğü üzere okul 3 sorunun sebepleri arasında ve en çok geçtiği için 1. sırada , 2. sırada ise kişilik geliyor.

    yani elimde var olan kullanıcı cevaplarını toplu bir şekilde sorguya dahil edebilir miyim.

    Yapmaya çalıştığım şuna benziyor aslında.
    matematikte farklı kümeler arasında "ortak küme" oluşturmaya benziyor.
    her soruda elimize farklı bir küme geçiyor bunlar arasındaki en çok elemanlı ortak kümeyi bulmaya çalışıyorum aslında


    yardımcı olan, olmaya çalışan herkese teşekkürler.
    Hocam açıkçası tam anlayamadım, ama anlattığınıza göre bir tabloyada daha gerek var. Sebep_grup diye. bu tabloya da soru gruplarını sebepler ile birlikte atmanız gerek.
  • 02-05-2014, 23:23:53
    #7
    Deve adlı üyeden alıntı: mesajı görüntüle
    Hocam açıkçası tam anlayamadım, ama anlattığınıza göre bir tabloyada daha gerek var. Sebep_grup diye. bu tabloya da soru gruplarını sebepler ile birlikte atmanız gerek.

    o örnekte tam açıklayamadıysam kusura bakmayın yani sorulan sorular;

    1 e ---- cevap evet olduğu için idsi = 1 olan sorunun ilişkili olduğu sebep -> sağlık & beden
    2 e ----cevap evet olduğu için idsi = 2 olan sorunun ilişkili olduğu sebepler -> okul | ev aile
    3 h ---- ilişkisiz , işlem yok
    11 e ---- cevap evet olduğu için idsi = 11 olan sorunun ilişkili olduğu sebepler -> okul | kişilik
    13 e ---- cevap evet olduğu için idsi = 13 olan sorunun ilişkili olduğu sebepler -> okul | toplumsal | kişilik

    sonuç olarak okul en çok geçtiği için sonuç "okul" olacaktır


    @Ibolac 'ın önerisi de mantıklı o şekilde bir sonuç almaya çalışacağım galiba
  • 02-05-2014, 23:36:00
    #8
    uysal_rockci adlı üyeden alıntı: mesajı görüntüle
    o örnekte tam açıklayamadıysam kusura bakmayın yani sorulan sorular;

    1 e ---- cevap evet olduğu için idsi = 1 olan sorunun ilişkili olduğu sebep -> sağlık & beden
    2 e ----cevap evet olduğu için idsi = 2 olan sorunun ilişkili olduğu sebepler -> okul | ev aile
    3 h ---- ilişkisiz , işlem yok
    11 e ---- cevap evet olduğu için idsi = 11 olan sorunun ilişkili olduğu sebepler -> okul | kişilik
    13 e ---- cevap evet olduğu için idsi = 13 olan sorunun ilişkili olduğu sebepler -> okul | toplumsal | kişilik

    sonuç olarak okul en çok geçtiği için sonuç "okul" olacaktır


    @Ibolac 'ın önerisi de mantıklı o şekilde bir sonuç almaya çalışacağım galiba
    Hatta hepsini saydırarak "sorunlarınızın %70 ı okulla ilgili, bunun dışında kalan sorunların ise %22'si şununla ilgili, kalanı ise şununla ilgili" gibi şeylerde yapabilirsin