merhaba benim filmler ve oyuncular falan diye tablolarım var ben film detay sayfamda oyuncuları listelemek istiyorum fakat tam bir çözüm bulamadım yardımcıolurmusunuz yani mantıgı nedir örnek olarak nasıl yaparım
C# listeleme sorunu
Cevaplar
veritabanında film tablosuna oyuncu tablosundaki oyuncu idlerini çekebilirsin. filmler tablosunda atıyorum 20 tane alan oluşturursun. film adı, film id, film yılı vs.den sonra oyuncuid1, oyuncuid2 vs. şeklinde ya da oyuncular diye bir alan oluşturup oyuncuların idlerini aralarında virgüllerle tek bir alana kaydedebilirsin. filmler için oyuncu çekerken ya da oyuncu kaydederken virgüllere göre işlem yaparsın. eyyorlamam bu kadar
Peki Oyuncular tabloma Filmıdbir ,filmıdiki ,filmid3 . . . diye kolonlar açsam bunlardı çagırırken filmdetay Sayfamda Sorguda Where Id=FilmIdbir ,Id=Filmıdiki seklinde yapılabilrmi
Bak dostum filmler ve oyuncular tablon var. Bu tabloların ilişkisi icin atıyorum FilmOyunculari tablosu açıcaksın. Id,FilmId,OyuncuId alanların olacak. Buradan da hangi oyuncu hangi filmde oynamış bileceksin. FilmOyunculari tablosuna joinlerle filmler ve oyuncular tablosunu baglayıp film adını ve oyuncu adlarını gösterebilirsin. Daha sonra FilmOyuncuları tablosuna FilmId li bir sorgu gönderdiginde sadece o filme ait bütün oyuncuları listelersin. Siteni ado.net le mi yapıyosun yoksa entity filan mı kullanıyorsun ?
evet öyle de yapılabilir. benim dediğim de bunun simetriği. sadece aynı şeyi filmler tablosunda yapıyorsun. hangisi daha kolayına gelirse öyle yap. bir oyuncunun oynadığı 50 tane filmi 50 tane kolona koymak yerine bir filmde oynayan 20 tane oyuncuyu 20 tane kolona koymak daha mantıklı. biraz uğraştırabilir ama 20 tane kolonla uğraşmak yerine bir tane kolona oynayan oyuncuların id'lerini aralarında virgül ya da noktalı virgülle yazman daha da mantıklı.
daha önce epey veritabanı tasarlamıştım ama belki buradaki db uzmanları daha mantıklı yöntemler de söyleyebilir :)
daha önce epey veritabanı tasarlamıştım ama belki buradaki db uzmanları daha mantıklı yöntemler de söyleyebilir :)
Ado.net kullanıyorum da işte o join olayını yapamıyorum msdn de önerdilerde yapamadım o kısmı
tablolarını kolonlarıyla beraber yazsana buraya :)darkhill dedi: ↑Ado.net kullanıyorum da işte o join olayını yapamıyorum msdn de önerdilerde yapamadım o kısmı
bu filmler tablom
buda oyuncular 
buda oyuncular 
Filmler Tablosunda Filmin ID'sinden başka ID düşünülmez (belki YapımcıID olabilir), Oyuncular tablosunda da FilmID,OdulID ve YorumID sahaları olmamalı. Filmler ve Oyuncular tablolarını ilişkisini FilmOyuncu isimli başka bir tabloda tutmalısınız. 1 Filmin 1'den fazla oyuncusu olabilir. Bu tabloda FilmID ve OyuncuID kolonlarında bir filmde oynayan oyuncuları tutabilirsiniz.
İkinci olarak 1 oyuncu 1'den fazla filmde de oynayabilir.
Örnek
Tablo: FilmOyuncu
FilmID OyuncuID
===== ======
1 5
1 12
1 16
:
2 5
2 8
2 11
2 tane film var 5 ID'li oyuncu 2 filmde de oymamış
Join ise (bir filmin oyuncuları)
SELECT * FROM Filmler
INNER JOIN FilmOyuncu on Filmler.ID = FilmOyuncu.FilmID
WHERE FilmOyuncu.FilmID = @ID
oyuncular için (oyuncunun oynadığı Filmler)
SELECT * From Oyuncular
INNER JOIN FilmOyuncu ON Oyuncular.ID=FilmOyuncu.OyuncuID
WHERE FilmOyuncu.OyuncuID=@OyuncuID
İkinci olarak 1 oyuncu 1'den fazla filmde de oynayabilir.
Örnek
Tablo: FilmOyuncu
FilmID OyuncuID
===== ======
1 5
1 12
1 16
:
2 5
2 8
2 11
2 tane film var 5 ID'li oyuncu 2 filmde de oymamış
Join ise (bir filmin oyuncuları)
SELECT * FROM Filmler
INNER JOIN FilmOyuncu on Filmler.ID = FilmOyuncu.FilmID
WHERE FilmOyuncu.FilmID = @ID
oyuncular için (oyuncunun oynadığı Filmler)
SELECT * From Oyuncular
INNER JOIN FilmOyuncu ON Oyuncular.ID=FilmOyuncu.OyuncuID
WHERE FilmOyuncu.OyuncuID=@OyuncuID
işte benim burda anlamadıgım kısım ben filmoyuncu diye bir tablo açtım diyelim burda 1 filme bir oyuncu belirtmicem ben yani bu kısımını anlayamıyorum aralarına virgül koyarakmı diğer oyuncuların Idleri belirticem bir filmde bir oyuncu yok veya bir oyuncu 1 filmde oynamıyo
yukarıda SQL ifadelerini yazdım
Hayır virgül koymana gerek yok.darkhill dedi: ↑işte benim burda anlamadıgım kısım ben filmoyuncu diye bir tablo açtım diyelim burda 1 filme bir oyuncu belirtmicem ben yani bu kısımını anlayamıyorum aralarına virgül koyarakmı diğer oyuncuların Idleri belirticem bir filmde bir oyuncu yok veya bir oyuncu 1 filmde oynamıyo
Örnek veriyorum
Inception filmin ID'si 1 olsun
Bu durumda Oyuncular tablonada kayıt ekleyeceksin eklerken ise FilmID kısmına 1 vermen gerekiyorki 1 ID'li filmin Oyuncularına erişebilesin.
Bütün oyuncuları tek kayıtta değil birden fazla kayıtta eklemelisin.
3. bir tablo yani FilmOyuncu tablosu olmalıdarkhill dedi: ↑işte benim burda anlamadıgım kısım ben filmoyuncu diye bir tablo açtım diyelim burda 1 filme bir oyuncu belirtmicem ben yani bu kısımını anlayamıyorum aralarına virgül koyarakmı diğer oyuncuların Idleri belirticem bir filmde bir oyuncu yok veya bir oyuncu 1 filmde oynamıyo
Tamam FilmOyuncu Tablosunu Oluşturdum Şimdi Ne yapmam Gerekiyor
verdigin sql cümlesini ?
verdigin sql cümlesini ?
darkhill iyi dinle kardeşim şimdi :)
Filmler
ID | FilmAdi
1 Truva
Oyuncular
ID | OyuncuAdi
1 Brad Pitt
2 Eric Bana
FilmOyuncu
ID | FilmID | OyuncuId }
1 1 1 } -- > Filmoyuncu tablona ilişkileri ver. FilmId ye filmlerden, OyuncuId ye oyunculardan. Id zaten oto
2 1 2 } olarak artıyor. Bunları listeleyecegin sql sorgusunu da aşşağıda yazıyorum.
Select Filmler.Id , FilmAdi,OyuncuAdi FilmOyuncu FO
Left join Filmler F on F.Id=FO.FilmId
Left join Oyuncular O on O.Id=FO.OyuncuId
bu sorgu sana tüm filmleri ve oyuncularını listeler. Bu sorgunun altına Where FO.FilmId = 1 yazarsan sana sadece 1 Id li filmin oyuncularını getirir. Bu açıklamalrala da yapamazsan artık evine gelip ben yazıcam programı :))
Filmler
ID | FilmAdi
1 Truva
Oyuncular
ID | OyuncuAdi
1 Brad Pitt
2 Eric Bana
FilmOyuncu
ID | FilmID | OyuncuId }
1 1 1 } -- > Filmoyuncu tablona ilişkileri ver. FilmId ye filmlerden, OyuncuId ye oyunculardan. Id zaten oto
2 1 2 } olarak artıyor. Bunları listeleyecegin sql sorgusunu da aşşağıda yazıyorum.
Select Filmler.Id , FilmAdi,OyuncuAdi FilmOyuncu FO
Left join Filmler F on F.Id=FO.FilmId
Left join Oyuncular O on O.Id=FO.OyuncuId
bu sorgu sana tüm filmleri ve oyuncularını listeler. Bu sorgunun altına Where FO.FilmId = 1 yazarsan sana sadece 1 Id li filmin oyuncularını getirir. Bu açıklamalrala da yapamazsan artık evine gelip ben yazıcam programı :))
çok teşekkür ederim bukadar anlattınız yaptım :)