Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Siteiçi mesajlaşmaları listeleme sorunu?

Konu, 'SQL' kısmında osman arslan tarafından paylaşıldı.

  1. osman arslan

    osman arslan Aktif Üye

    Kayıt:
    31 Temmuz 2004
    Mesajlar:
    377
    Beğenilen Mesajlar:
    0
    Meslek:
    Grafik & Web Tasarım Uzmanı
    Şehir:
    İstanbul
    Siteiçi mesajlaşma sistemi yaptım. Fakat gelen mesajları sıralarken bir işin içinden çıkamadım. Tarihe göre ve okumayan mesajlara göre aynı anda sıralama yapmak istiyorum. Yani;

    1- Eğer YENİ bir mesaj gelmiş ve OKUNMAMIŞSA her zaman listenin en tepesinde gözüksün,
    2- Eğer birden fazla YENİ mesaj varsa EN SON gönderilen EN ÜSTTE olsun,
    3- Tüm mesajlar okunmuşsa, en son gönderilenler EN ÜSTTE olsun (klasik tarih sıralaması),

    istiyorum.

    Kullandığım sıralama kodu şu:

    (...) "GROUP BY uye_id ORDER BY mesaj_tarih, mesaj_okundu DESC"

    Fakat bu kodla 2 nolu maddede sorun oluşuyor. Son gönderilen mesaj en üstte gözükmüyor. Yeni gelen mesaj, ilgili mesajın kendi sıralamasında OKUNMAMIŞ hale gelmesinde ibaret kalıyor. YAni en üstte çıkmıyor. Diyelim ki 3 ay önce biriyle mesajlaşmışsınız. Adamsize tekrar mesaj attığında ta arka sayfalarda OKUNMAMIŞ olarak gözüküyor. Ben ise istiyorum ki yeni mesaj atıldığında EN ÜSTTE çıksın o mesajlaşma. Sorun nasıl düzeltilebilir acaba?
     
  2. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    339
    Beğenilen Mesajlar:
    88
    Şehir:
    Hatay
    "ORDER BY mesaj_tarih DESC mesaj_okundu DESC" yapmayı denediniz mi, bir de öyle bir yol varmış.
     
  3. osman arslan

    osman arslan Aktif Üye

    Kayıt:
    31 Temmuz 2004
    Mesajlar:
    377
    Beğenilen Mesajlar:
    0
    Meslek:
    Grafik & Web Tasarım Uzmanı
    Şehir:
    İstanbul
    Bu şekilde yaptım ama hata verdi. Sanırım bu kod şekli çalışmıyor.

    EDİT: araya virgül koyunca çalıştı, ama malesef sorunumu çözmedi :(
     
    Son düzenleme: 28 Ocak 2017
  4. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    339
    Beğenilen Mesajlar:
    88
    Şehir:
    Hatay
    evet arada virgül olacaktı ben gözden kaçırmışım :)

    Sorgunun sonunu yazmışsınız sadece, aslında bu sıralama için yeterli olmayabilir, çektiğiniz tabloları çekiş şekliniz de etkileyebiliyor sıralamayı. Sorgunun tamamını paylaşırsanız ben ve diğer arkadaşlar ne yaptığımızı bilerek cevap verebiliriz belki :)
     
  5. osman arslan

    osman arslan Aktif Üye

    Kayıt:
    31 Temmuz 2004
    Mesajlar:
    377
    Beğenilen Mesajlar:
    0
    Meslek:
    Grafik & Web Tasarım Uzmanı
    Şehir:
    İstanbul
    Sorgum aşağıda;

    "SELECT * FROM t_mesajlar INNER JOIN t_uyeler ON t_mesajlar.mesaj_kimden=t_uyeler.uye_id WHERE mesaj_kime=".$_SESSION['uye_id']." GROUP BY uye_id ORDER BY mesaj_tarih DESC, mesaj_okundu ASC"

    Şu an mesajları çekiyor, ama ilk mesajın açıldığı tarihi baz alıyor. Ben ilgili mesajlar içinden son mesajın tarihini alıp işlem yapmasını istiyorum. Yani bir mesajlaşma var, bu mesajlaşmada 12 mesaj var. En son atılan mesajının tarihini alıp, onu mesajlar listesinin en tepesine OKUNMAMIŞ olarak listelemesini istiyorum. OKUNMAMIŞ kısmını hallettim sanırım da, şu mesajlaşma içinde EN SON ATILAN mesajın tarihini almayı beceremedim sanırım.
     
  6. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    339
    Beğenilen Mesajlar:
    88
    Şehir:
    Hatay
    "SELECT * FROM (SELECT * FROM t_mesajlar ORDER BY mesaj_tarih DESC) AS t_mesajlar INNER JOIN t_uyeler ON t_mesajlar.mesaj_kimden=t_uyeler.uye_id WHERE mesaj_kime=".$_SESSION['uye_id']." GROUP BY uye_id ORDER BY mesaj_okundu ASC"

    burda FROM'dan sonraki t_mesajlar kısmını özel olarak çektim ve çekerken DESC olarak sıralayıp çektim, AS ile t_mesajlar diye bir gruba (ya da her neyse) atadım. :)
     
    osman arslan bunu beğendi.
  7. osman arslan

    osman arslan Aktif Üye

    Kayıt:
    31 Temmuz 2004
    Mesajlar:
    377
    Beğenilen Mesajlar:
    0
    Meslek:
    Grafik & Web Tasarım Uzmanı
    Şehir:
    İstanbul
    Galiba oldu gibi :), test ediyorum ama şarjım azaldı, iyice test edip buraya yazacağım. Şimdiden teşekkür ederim :)
     
  8. yunus

    yunus Daimi Üye

    Kayıt:
    26 Şubat 2015
    Mesajlar:
    521
    Beğenilen Mesajlar:
    127
    order by da soldan sağa doğru hangi sırada yazdıysanız o sıraya göre öncelik alır. yani okunmayan mesajlar en üstte olması için önce okundu, daha sonra mesaj_tarih belirtmelisiniz.

    ayrıca her iki kolon için ASC veya DESC yi ayrı ayrı belirtmelisiniz. varsayılan olarak ASC yani küçükten büyüğe sıralanır.


    mesaj okundu alanı için 0 okunmadı 1 okundu anlamına geliyorsa.


    ORDER BY mesaj_okundu ASC, tarih DESC
    veya
    ORDER BY mesaj_okundu , tarih DESC


    veya farklı bir kodlama yaptıysanız

    ORDER BY mesaj_okundu DESC, tarih DESC

    şeklinde kullanabilirsiniz.
     
    dinlex ve osman arslan bunu beğendi.
  9. osman arslan

    osman arslan Aktif Üye

    Kayıt:
    31 Temmuz 2004
    Mesajlar:
    377
    Beğenilen Mesajlar:
    0
    Meslek:
    Grafik & Web Tasarım Uzmanı
    Şehir:
    İstanbul
    Teşekkür ederim, aynen üstteki gibi yaptım. Oldu gibi, ama biraz daha detaylı incelemem lazım. Farklı hesaplardan mesaj atıp denemesini yapmam lazım. Ama sanırım oldu :)