En iyi yanıtlayıcılar
Seçilen Verilere Göre Veri Seçmek

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?
- Düzenleyen Abdulkadir NURKALEM (Student) 1 Aralık 2013 Pazar 19:22
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
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 ;)
-
-
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