Bir sohbette son mesajı getirme | SQL
(not) aşağıda kayıtlar için tablo kullanmayı denedim çıktısı kötü oldu. Düzenlerken çalışıyordu..
Arkadaşlar selam,
Ödevim için bir proje geliştiriyorum.Sosyal medya platformu.Basit çapta ama beklenen tüm işlemler gerçekleşiyor.
Projemin bir kısmında sohbet sayfası bulunuyor.
Klasik tasarım sol kısımda kişiler sağ kısımda mesajlar.
Sol kısımda görünecek bilgiler; sohbet edilen kişilerin avatarı, tam isimleri ve son mesaj. WhatsApp Web'in tasarımı gözünüze gelsin.
mesaj tablomun alanları:
&kaynak
&hedef
icerik
resim
okundu
&tarih
örnek bir mesaj tablosu kayıtları:
kaynak | hedef | icerik | resim |okundu | tarih
-- | -- | -- | -- | -- | --
1 |2 | mesaj 1 | null| 0| 2021-05-18 10:00
2 |1 | mesaj 2 | null| 0| 2021-05-18 10:01
2 |1 | mesaj 3 | null| 0| 2021-05-18 10:02
1 |3 | mesaj 4 | null| 0| 2021-05-18 10:10
(1 nolu üyenin kendinizin olduğunu varsayın.)
sohbetler = $this->Main_model->querySQL2('
SELECT
m.*, u.no, u.avatar, u.tam_ad
FROM
mesaj m, uye u
WHERE
m.hedef = u.no AND
m.tarih IN
(
SELECT MAX(tarih) as maxTarih
FROM mesaj
WHERE kaynak = ? OR hedef = ?
GROUP BY hedef
)
ORDER BY m.tarih DESC
',
array($this->ben->no,$this->ben->no)
);
örnek çıktı.
kaynak | hedef | icerik | resim |okundu | tarih
-- | -- | -- | -- | -- | --
1 |2 | mesaj 1 | null| 0| 2021-05-18 10:00
2 |1 | mesaj 3 | null| 0| 2021-05-18 10:02
1 |3 | mesaj 4 | null| 0| 2021-05-18 10:10
yukarıdaki kod parçası çalışıyor fakat görüldüğü üzere aynı sohbette hem benim son mesajımı hemde karşı tarafın son mesajını getiriyor. bunun sebebi WHERE kaynak = ? OR hedef = ? satırı ve gruplama yapmam. bu satırda sadece kaynak kullanırsam sadece benim son mesajım geliyor. sadece hedef kullanırsam mesaj attığım kişinin son mesajını görebiliyorum.
soru gelsin...
ben istiyorum ki (içinde benim bulunduğum WHERE kaynak = 1 OR hedef = 1 durumu) bir sohbette sadece son atılan mesaj görünsün.
////// GÜNCELLEME //////
SQL kısmında bir cevap bulamadım ama kabaca bir çözüm buldum. Her sohbet için bir kod oluşturdum. ve gruplamayı buna göre yaptım.
mesaj tablosuna bir alan ekledim kod adında.
Yukarıdaki örneğe göre:
1 -> 2 || 2 -> 1 sohbetinde a1 kodu özel olarak tanımlandı.
1 -> 3 || 3 -> 1 sohbetinde a2 kodu özel olarak tanımlandı.
bu koda göre gruplama yapınca WHERE kaynak = 1 OR hedef = 1 durumunda o sohbetin son mesajını alabiliyorum.
yine de cevaplarınızı bekliyorum.
bu şekilde denermisin
ORDER BY UNIX_TIMESTAMP(m.tarih) DESC LIMIT 1