Tablo Eşleştirme

Kodla Büyü

mfatih4125

Üye
Mesajlar
13
Sayın hocalarım ben bilgisayar öğretmeni değilim ama programlamaya karşın bir hevesim var. Uzun zamandır Classic asp, sql programlama ile amatör şekilde uğraşmaktayım. Bu günlerde bir tablo eşleştirme ile ilgili çözemediğim bir problem yaşamaktayım. Siniflar ve tizin25 adında iki tablom var. Siniflar tablosunda sin_id diye sınıf kodlarını içeren bir sütün var. Ancak diğer tabloda bu sınıf kodları yatay olarak her sütüna dağılmış durumda. Dolayısıyla where siniflar.sin=id=tizin25.sin_id şeklinde direk eşleştirme yapamıyorum. Bu olayı nasıl çözebilirim.
 

Ekli dosyalar

  • table1.webp
    table1.webp
    31.1 KB · Görüntüleme: 74
  • table2.webp
    table2.webp
    10.1 KB · Görüntüleme: 70
Veritabanı tasarımınız komple yanlış olduğundan bahsettiğiniz gibi tek seferde seçme işlemi yapmanız mümkün değil. Tablolarınızı yeniden tasarlamak zorundasınız. Örneğin şu soruyu sorsam ne cevap verirsiniz, 12-E adında yeni bir sınıf eklemek zorunda kalacak olsanız ne tür sorunlar ortaya çıkar? Eğer zamanım var, öğrenip yaparım derseniz, ilişkisel veritabanı tasarımı konusunu araştırarak bir veritabanı normalizasyon kurallarına uygun olarak nasıl tasarlanır öğrenmenizi tavsiye ederim.
Sanırım test, sınav sistemi gibi bir şey yapıyorsunuz. Tüm veritabanınızdaki tabloları ve alanları ve bunlar arasındaki ilişkileri gösteren bir görsel eklerseniz daha fazla yardımcı olabiliriz ama açıkçası bu tablolara bakarak söyleyebileceğim veritabanı bilginizin henüz az olması hasebiyle öncelikle kendi bilginizi artırmanız çok önemli. Aksi halde yeni bir tablo oluşturmak zorunda kaldığınızda yine çıkmaza gireceksiniz.
 
Sayın hocam doğrudur siniflar id dikey olarak gelse hiç bir sıkıntı olmayacak. Bunu ö şekilde planladığım zaman bu sefer de konu id ler yatay olarak kalacak. Kafamda veritabanını bir türlü oturtamadım. toplamda 4 adet tablom var. Birinde test türleri (test25). İkincisi konular (konu25). Üçüncüsü sınıflara açılan testeler (tizin25). Dördüncüsü Siniflar tablosu. Uyeler giriş yaptığı zaman kayıtlarında gözüken sınıf isimleri ile buradaki sınıf tablosunu eşleştirip açık testlere ulaşmalarını sağlıyor. Buraya kadarki kısmın hepsini başardım. Sadece test izinlerinde verirken açık testleri görmek için sınıflara göre süzerken iki tabloyu birleştirmede sıkıntı çekiyorum. Burada takıldım. Bununla ilgili görseli yükledim. Test izinlerinde siniflar tablosu ile tizin25 tablosundan aynı anda veri çekemiyorum. Burada siniflara göre çekilmiş halini gösteren resim. Ben Evet olarak açılmış testlere checked olarak gözükmesini nasıl sağlayabilirim. Pivot koduyla çözüleceğini okuyorum ama bir türlü yapamadım.
 

Ekli dosyalar

  • konu25.webp
    konu25.webp
    52.3 KB · Görüntüleme: 35
  • siniflar.webp
    siniflar.webp
    19 KB · Görüntüleme: 37
  • test izinleri.webp
    test izinleri.webp
    25.7 KB · Görüntüleme: 35
  • test25.webp
    test25.webp
    11.5 KB · Görüntüleme: 34
  • tizin25.webp
    tizin25.webp
    93.7 KB · Görüntüleme: 30
"s" değerlerin bir düzen içerisinde gidiyor önce hepsi hayır, yaptıkça evet açılıyor, diğerleri hayırda kalıyor. O zaman "s" diye bir tane sütunun olsun içerisine 1 2 3 ... gibi değerler olsun. örn. "3" olursa s3 kadar evet diğerleri hayır anlamında .. Sende kodlamanı "3" e göre yaparsın nasıl olur, ben olsam böyle yapardım..
 
"s" değerlerin bir düzen içerisinde gidiyor önce hepsi hayır, yaptıkça evet açılıyor, diğerleri hayırda kalıyor. O zaman "s" diye bir tane sütunun olsun içerisine 1 2 3 ... gibi değerler olsun. örn. "3" olursa s3 kadar evet diğerleri hayır anlamında .. Sende kodlamanı "3" e göre yaparsın nasıl olur, ben olsam böyle yapardım..
Tarif ettiğiniz gibi denedim. Şu şekilde kodu düzenledim.

For i =1 To 13 step 1
Set s_cats = Connection.Execute("SELECT * FROM tizin25, siniflar WHERE siniflar.sin_id = tizin25.s"&i&" and tizin25.konu_id=102")

Ancak şu şekilde bir sonuç elde ettim. Hata da vermiyor ancak verileri de çekmiyor. Nerede hata yapıyorum anlamadım?
 

Ekli dosyalar

  • result.webp
    result.webp
    5.2 KB · Görüntüleme: 20
"s" değerlerin bir düzen içerisinde gidiyor önce hepsi hayır, yaptıkça evet açılıyor, diğerleri hayırda kalıyor. O zaman "s" diye bir tane sütunun olsun içerisine 1 2 3 ... gibi değerler olsun. örn. "3" olursa s3 kadar evet diğerleri hayır anlamında .. Sende kodlamanı "3" e göre yaparsın nasıl olur, ben olsam böyle yapardım..
Değerli kardeşim verdiğiniz fikir doğrultusunda çalışma yaptım. Baya da mesafe katettim. Ancak anlamadığım bir şekilde sınıf isimlerini yazdırmadım. Nedenini bir türlü anlayamadım. Kodları şöyle düzenledim.

For i =1 To 13 step 1

Set s_cats = Connection.Execute("SELECT * FROM tizin25 LEFT OUTER JOIN siniflar ON siniflar.sin_id = tizin25.s"&i&" where tizin25.konu_id=102")

Do Until s_cats.Eof

Eşleştirme yapıyor. tizin25 tablosundan verileri okuyor. Ancak sınıflar tablosundan sinif adını okuyamıyor. Gelen sonuç şu şekilde.
 

Ekli dosyalar

  • snf.webp
    snf.webp
    9.9 KB · Görüntüleme: 22
Hocam yardımcı olmak isterim ama IIS yüklü değil bilgisayarımda, bir de böyle yazı olarak çalışamıyorum, deneyerek görmem lazım..
 
ilksms
Geri
Üst