• 27-10-2021, 17:28:16
    #1
    Merhaba,

    Bir sistem için kullanıcılar arası mesajlaşma yapıyorum. Aşağıdaki şekilde bir veritabanı hazırladım.

    HTML Tasarım ise aşağıdaki gibi:



    Şimdi sorum şu...

    Aşağıdaki sorguyu kullandığımda (1 id'li kullanıcı giriş yapmışken) gönderdiğim ve aldığım mesajları görebiliyorum.
    SELECT * FROM `messages` WHERE receiver_id = 1 OR sender_id = 1


    Yukarıdaki sorguyu biraz değiştirip group by ve order by koyduğumda:
    SELECT * FROM `messages` WHERE receiver_id = 1 OR sender_id = 1 GROUP BY receiver_id ORDER BY updated_at DESC


    Görüldüğü gibi aynı sohbete ait olan "selam" mesajı normal olarak tekrar çıkıyor. 3 ve 4 doğru görünüyor.

    Yapmak istediğim şey ise, sohbetlere ait en son mesajı listelemek. Biraz kafam karıştı... umarım doğru anlatabilmişimdir. Yardımcı olursanız sevinirim...
  • 27-10-2021, 17:36:13
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    conversations adında bir tablo ve messages kısmında conversation_id şeklinde bir sütun daha oluşturup önce conversations tablosundan gerekli konuşmayı sorgulayıp ardından conversation_id 'ye göre mesajları listeleme yapman daha mantıklı olacaktır.
  • 27-10-2021, 17:39:48
    #3
    dahauzman adlı üyeden alıntı: mesajı görüntüle
    conversations adında bir tablo ve messages kısmında conversation_id şeklinde bir sütun daha oluşturup önce conversations tablosundan gerekli konuşmayı sorgulayıp ardından conversation_id 'ye göre mesajları listeleme yapman daha mantıklı olacaktır.
    bende tam bunu söyleyecektim.




    yukardaki gibi bir db yapısı kullanabilirsin.
  • 27-10-2021, 17:42:05
    #4
    teşekkür ederim, bu şekilde düzenleyeyim.
    Polat adlı üyeden alıntı: mesajı görüntüle
    bende tam bunu söyleyecektim.




    yukardaki gibi bir db yapısı kullanabilirsin.
    dahauzman adlı üyeden alıntı: mesajı görüntüle
    conversations adında bir tablo ve messages kısmında conversation_id şeklinde bir sütun daha oluşturup önce conversations tablosundan gerekli konuşmayı sorgulayıp ardından conversation_id 'ye göre mesajları listeleme yapman daha mantıklı olacaktır.
  • 27-10-2021, 17:43:15
    #5
    sadece son mesajı listelemek istiyorsan limit vererek bunu yapabilirsin eğer ben yanlış anladıysam tam olarak yapmak istediğini açıklarsan yazabilirim sorguyu

    SELECT * FROM `messages` WHERE receiver_id = 1 OR sender_id = 1 GROUP BY receiver_id ORDER BY updated_at DESC LIMIT 1
  • 27-10-2021, 17:44:35
    #6
    Bu genel sonuçtan sadece bir tane döndürüyor hocam. Yukarıdaki gibi bir tablo daha açtığımda sorun çözülecek, teşekkürler ilginiz için.
    Misafir adlı üyeden alıntı: mesajı görüntüle
    sadece son mesajı listelemek istiyorsan limit vererek bunu yapabilirsin eğer ben yanlış anladıysam tam olarak yapmak istediğini açıklarsan yazabilirim sorguyu

    SELECT * FROM `messages` WHERE receiver_id = 1 OR sender_id = 1 GROUP BY receiver_id ORDER BY updated_at DESC LIMIT 1