SQL' de İlişkili Tablolardan Kayıt Sayısı Bulmak

Birbiriyle ilişkisi olan iki tablonuz var. Birisi markalar diğeri modeller varsayalım.

Birbiriyle ilişkisi olan iki tablonuz var. Birisi markalar diğeri modeller varsayalım. Bir marka içinde kaç model olduğunu tek SQL sorgusu yaparak hesaplamak istiyorsunuz. Tablo yapımız şu şekilde olsun:

TABLO 1
-------------------
ID - MARKA
1 - FORD
2 - TOFAŞ
3 - VW

TABLO 2
---------------------
ID - MID - URUN
1 - 1 - MUSSTANG
2 - 1 - FIESTA
3 - 1 - CONNECT
4 - 2 - ŞAHİN
5 - 3 - GOLF
6 - 2 - DOBLO

Burada Tablo2'deki MID alanı Tablo1'deki ID ile ilişkilidir. Örneğin Tablo2 6 numaralı ID Doblo model arabamızın MID değeri 2'dir. Tablo1'de 2 numaralı ID'ye baktığımızda markanın TOFAŞ olduğunu görüyoruz. Şimdi hangi markadan kaç adet model olduğunu tek ve pratik bir sorguyla bulabiliriz. Sorgu içinde sorgu zahmetine son ! :)


SELECT marka, (select count(ID) from tablo2 where tablo2.MID=tablo1.ID

limit 1) AS marka_sayisi FROM tablo1 ORDER BY marka_sayisi DESC



Yalnız belirtmek isterim ki; bu işlem sitenizi yoracaktır. En mantıklısı tablo1 yani markalar tablosunda "model_sayisi" adında alan oluşturup her model ekleme ve silmede o alanı artırıp azaltmanız hem kod kalabalığı açısından hemde sitenin yorulmaması açısından daha sağlıklı olacaktır.

Kolay gelsin.
  • Etiketler;
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Bu tür işlemlerde çok rahat MsSQL Server 2005'i tavsiye ediyorum :) Bu tür işlemler ve daha gelişmişleri çok rahat yapılabilmektedir. Üzerinde soru işaretleri olan bir konuydu. Makale yazman iyi olmuş. İyi Çalışmalar.
Evet MsSQL Server yada alternatif MySQL Maestro gibi programlarla çok pratik yapabilirsiniz ancak ben öğrenme aşamasında buna karşıyım. İlk önce bu şekilde mantık öğrenilir daha sonra pratiğe geçilir. Hiç bir bilgisayar kursunda size mantığı öğretmeden programı kullanmayı öğretmezler.
ben şöyle düşündüm; [code]SELECT marka, count(mid) FROM tablo1, tablo2 WHERE tablo1.id = tablo2.mid GROUP BY tablo2.mid;[/code] bu şekilde daha anlaşılır bence.
group by kullanarak tek bir select ile de yapılabilir.
Peki bu sayıyı ekrana nasıl yazdırabiliriz acaba
crawler yazdığın kod çok işime yaradı teşekkür ederim.
merhaba hocam peki bu tablolara veri girmeyide anlatırmısınız
eline sağlık abi faydalı bir ders olmuş teşekkürler :)

Yukarı Git