Turgay Can adlı üyeden alıntı

Örnek üzerinden gidelim daha oturaklı olur.

Turgay, Ahmet ile konuşuyor. Turgay ile ahmet 'te arkadaş zaten arkadaş olmadan konuşabilme olayının olmadığını ön görüyorum.

Turgay'ın uye id'si = 86 olsun.

Sohbet üzerinden en son konuştuğu kişileri zaman sutununa göre filtremem gerekli.



bu bana sohbet ettiğim kişilerin listesini sondan başa doğru verdi.

arkadaş tablosuna gerek varmı? sohbet özelliği için, zaten arkadaşlar birbirleri ile konuşabilir kısıtlaması uygulama bazında yapılmışken.. Ön görüm bu şekildeydi.

Konuşma barında arkadaşlarımıda göstermek istiyorsam.

şöyle bir yapı olmalı. arkadaş tablom üzerinde iki tane alan olmalı,

Arkadas tablosu lookup tablosu mantığında olmalı, ben uye_id'ye göre arkadas_id listesini aldığımda bana uye'nin tüm arkadaşlarını vermeli.

uye_id, arkadas_id



Arkadaşım olan uyeleri listeledim.

Şimdi sorunun cevabı ;

Arkadaşım olan kişileri zamana göre sondan başa göre listeleyelim. Burada sadece sohebt tablosu üzerinde daha önceden sohbet ettiklerimimi yoksa sohbet etmediklerimide listeyelim gibi soru oluşuyor. Ben etmediklerinide baz alıp, ona göre listeliyorum.

arkadas
uye_id arkadas_id
86 1
86 2
86 3

uyeler
id ad
86 turgay
1 ahmet
2 özlem
3 merve

sohbet
kim kime zaman
86 1 30ekim
86 2 1kasım
86 3 31ekim

Yukarıdaki şemaya göre bu şekilde rahatça üyeler listelenebilir. Ek olarak arkadaş kontrolü eklemek isterseniz bana göre saçma, çünkü arkadaş dışında sohbet edemez kontrolünü düşündüğümüzde.



Eğer arkadaş dışında kimse ile konuşamaz kontrolü varsa,

sohbet tablosu direkt uyeler tablosu ile join edilmesi yeterli olacaktır.


Şöyleki yazdıgınız sorguda cevabı vermiyor, belki kısaltmalarınızı yalnış geçirmişte olabilirim. Yaptıgım sayfa üyelerin arkadaşlarını en son sohbet ettiğine göre sıralıyorum. Bir diğeri de o üye kim bölümündede olabilir kime bölümündede yani hem mesajı gönderende alanda olabilir.

yazdıgınız şekilde olmuyor.

Kişinin arkadaşlarını sohbet zamanına göre listelemek.


select * from sohbet where kim = 86 order by zaman desc;

Bu fonksiyon bize sohbet ettiklerimizi vermeyecek ve kişinin yazdıklarını verecek fakat ona gelen mesajdada bulunabilir or kime=86 sql cümlesinide dahil etmeliyiz.

select * from uyeler where id in (select kimle from arkadas where kim =86);

Bu arkadaşları veriyor evet.

Bir yerde hata var
Mesela
SELECT * FROM uyeler LEFT OUTER JOIN sohbet ON sohbet.kim = uyeler.id where sohbet.kime=36 group by uyeler.id order by sohbet.zaman desc

Bu fonksiyon bana konuştugum kişileri gösteriyor burada group by uyeler.id kullanmazsam aynı kişi sürekli mesajlaştıgımız için arkadaş listemde gösterecektir fakat kullanırsamda son mesajıma göre sıralamayacaktır.