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.jpg
    table1.jpg
    93 KB · Görüntüleme: 65
  • table2.jpg
    table2.jpg
    31.8 KB · Görüntüleme: 61
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.jpg
    konu25.jpg
    176.3 KB · Görüntüleme: 28
  • siniflar.jpg
    siniflar.jpg
    59.3 KB · Görüntüleme: 28
  • test izinleri.jpg
    test izinleri.jpg
    92.6 KB · Görüntüleme: 27
  • test25.jpg
    test25.jpg
    34.7 KB · Görüntüleme: 26
  • tizin25.jpg
    tizin25.jpg
    154.3 KB · Görüntüleme: 21
"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.jpg
    result.jpg
    16.8 KB · Görüntüleme: 12
"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.jpg
    snf.jpg
    59 KB · Görüntüleme: 13
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..
 
Geri
Üst