none
Seçilen Verilere Göre Veri Seçmek RRS feed

  • Soru

  • Merhaba arkadaşlar. Şimdi benim bir veritabanım var. Bu veritabanımı mesajlaşmak için kullanıyorum. Şimdi şöyle sütunlar var;

    Adres (varchar)
    Mesaj (varchar)
    Okundu (int)

    Şimdi bu veritabanıma herkesin mesajlarını kaydediyorum. Yapmak istediğim bu veritabanından kaç farklı sohbet olduğunu GROUP BY ile seçmek ve, (asıl mesele burası) her sohbetteki mesaj sayısını ve okunmamış mesaj sayısını göstermek. Bunu bir sorgu ile yapmak istiyorum...

    Mesela;

    INSERT INTO Mesajlar VALUES('ahmet@gmail.com','Merhaba',1)
    INSERT INTO Mesajlar VALUES('ahmet@gmail.com','Merhaba',1)
    INSERT INTO Mesajlar VALUES('ahmet@gmail.com','Nasılsın',1)
    INSERT INTO Mesajlar VALUES('ahmet@gmail.com','İyiyim sen?',0)
    INSERT INTO Mesajlar VALUES('ahmet@gmail.com','Orda mısın?',0)
    
    INSERT INTO Mesajlar VALUES('mehmet@gmail.com','Selam',1)
    INSERT INTO Mesajlar VALUES('mehmet@gmail.com','A.S',1)
    INSERT INTO Mesajlar VALUES('mehmet@gmail.com','Nerdesin?',0)

    Böyle veriler ekledim diyelim. Elde etmek istediğim sorgu bu tabloda sohbetleri seçicek ve o sohbetteki toplam mesaj sayısını ve Okundu sayısı 0 olan, mesaj satır sayısını seçicek ve şöyle bir sonuç döndürecek..

    ahmet@gmail.com - Orda mısın? - 5/2
    mehmet@gmail.com - Nerdesin? - 3/1

    Bunu sadece bir sorgu ile nasıl yapabilirim?

    1 Aralık 2013 Pazar 19:21

Yanıtlar

  • Merhaba,

    İhtiyacınız olan çözümün scripti aşağıdadır:

    SELECT M1.adres, M1.mesaj,
           (CAST( (SELECT COUNT(*) FROM Mesajlar M2 WHERE M2.adres = M1.adres) AS varchar(3))+ '/' + CAST( (SELECT SUM(1 - M3.okundu) FROM Mesajlar M3 WHERE M3.adres = M1.adres) AS varchar(3))) AS Durum
      FROM Mesajlar M1
     WHERE M1.okundu = 0
     ORDER BY 1
    ;


    Örnek sonuç:

    adres    mesaj    Durum
    ahmet@gmail.com    İyiyim sen?    5/2
    ahmet@gmail.com    Orda mısın?    5/2
    mehmet@gmail.com    Nerdesin?    3/1

    • Düzenleyen Usanmaz 3 Aralık 2013 Salı 20:31
    • Yanıt Olarak Öneren Özgür Tekbaş 4 Aralık 2013 Çarşamba 11:20
    • Yanıt Olarak İşaretleyen Özgür Tekbaş 6 Aralık 2013 Cuma 14:05
    3 Aralık 2013 Salı 20:30

Tüm Yanıtlar

  • KULLANICI TABLOSU

    KullanıcıID = int

    KullanıcıAdı = nvarchar(20)

    ------------------------------------

    MESAJ TABLOSU

    MesajID = int

    KullanıcıID = int

    Mesaj = nvarchar(MAX)

    Okundumu = bool

    BUNU SANA BİR ÖRNEK OLARAK YAZDIM. YANİ VERİTABANI TABLONU İLK ÖNCE BU ŞEKİLDE DEĞİLSE DÜZENLE. DAHA SONRA İNNER JOİN İLE KULLANICI ID ÖRNEĞİN 14 OLANIN MESAJLARINI ÇEKECEKSİN. MANTIK BUDUR. İNNER JOİN BİLMİYORSAN BİRAZ ARAŞTIRABİLİRSİN. İKİ TABLOYU BİRLEŞTİREREK O TABLOLARDA Kİ İSTEDİĞİN VERİYİ ALABİLİRSİN ;)

    1 Aralık 2013 Pazar 20:28
  • Benim yapmam gereken tek tabloda sorgu oluşturmak. Yani halihazırda bi tablo var, ve ben sadece bu tablodaki verileri listeleyebiliyorum.. Yok mu bir yol?
    3 Aralık 2013 Salı 16:28
  • Merhaba,

    İhtiyacınız olan çözümün scripti aşağıdadır:

    SELECT M1.adres, M1.mesaj,
           (CAST( (SELECT COUNT(*) FROM Mesajlar M2 WHERE M2.adres = M1.adres) AS varchar(3))+ '/' + CAST( (SELECT SUM(1 - M3.okundu) FROM Mesajlar M3 WHERE M3.adres = M1.adres) AS varchar(3))) AS Durum
      FROM Mesajlar M1
     WHERE M1.okundu = 0
     ORDER BY 1
    ;


    Örnek sonuç:

    adres    mesaj    Durum
    ahmet@gmail.com    İyiyim sen?    5/2
    ahmet@gmail.com    Orda mısın?    5/2
    mehmet@gmail.com    Nerdesin?    3/1

    • Düzenleyen Usanmaz 3 Aralık 2013 Salı 20:31
    • Yanıt Olarak Öneren Özgür Tekbaş 4 Aralık 2013 Çarşamba 11:20
    • Yanıt Olarak İşaretleyen Özgür Tekbaş 6 Aralık 2013 Cuma 14:05
    3 Aralık 2013 Salı 20:30