Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Mesajlaşma mantığı

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

  1. exe676

    exe676 Üye

    Kayıt:
    29 Ağustos 2011
    Mesajlar:
    33
    Beğenilen Mesajlar:
    1
    merhaba arkadaşlar
    facebook tarzı basit bi sohbet sistemi yapıyorum..
    şimdi sorunum şu mesajlarım sayfasına girince her konuşma için 1 veri listelensin istiyorum

    fakat bir türlü başarılı olamadım.

    veri tabanı yapım şöyle
    https://i.hizliresim.com/nWLXaa.png
    [​IMG]


    select distinct kim, kime from mesajlar where kim = 1 or kime = 1;

    diye sorgu işletince çıktıda tekrar yaşanıyor.
    https://i.hizliresim.com/8dDVyQ.png
    [​IMG]

    bu şekilde tekrarlı dönüyor. her bir konuşma için gereken sorgu nasıl olmalı ?
     
  2. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    897
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    SELECT kim, kime FROM tablo GROUP BY kim, kime

    yazarsan kim, kime ler teke iner,

    ancak sen kime, kim lerle kim, kime ler aynıysada teke insin istiyorsun.

    işte bu biraz araştırmak gerekir.
    Bulursam onuda yazarım.
     
    exe676 bunu beğendi.
  3. exe676

    exe676 Üye

    Kayıt:
    29 Ağustos 2011
    Mesajlar:
    33
    Beğenilen Mesajlar:
    1
    sedirAğacı yorumun için teşekkürler. aynen dediğin gibi kişiler arası her sohbeti 1er kez çeksin istiyorum.

    Bu arada iyi bayramlar :)
     
    sedirAğacı bunu beğendi.
  4. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    897
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Biraz uğraştım ama olmadı, sql bilgim bu işe yetmedi.

    pID alanı her konuşma için tek ise, pID alanını GROUP BY yapmak yeterli olabilir, yada her konuşma için unique id no vermek.
     
    exe676 bunu beğendi.
  5. exe676

    exe676 Üye

    Kayıt:
    29 Ağustos 2011
    Mesajlar:
    33
    Beğenilen Mesajlar:
    1
    pID auto increment sütun onun kullanılma imkanı yok gibi hocam. Tek bir mesaj için benzersiz değer olması için tanımladım. Tek tabloda bu işi halletmeye çalışıyorum.
    Dediğin gibi özel bir değer atıycam ama tek tabloda gönderen ve alıcı taraflı oldugundan işin içinden çıkamadım

    Teşekkür ederim vaktini ayırıp cevaplaman bile yeterli.

    Sorun devam ediyor çözersem konuya eklerim.
     
    Son düzenleme: 25 Haziran 2017
  6. exe676

    exe676 Üye

    Kayıt:
    29 Ağustos 2011
    Mesajlar:
    33
    Beğenilen Mesajlar:
    1
    Şuan aklıma gelen tek şey şu. Ekstra 1 sütun açıp gönderen ve alıcı idlerini mesaj yollarken oraya atmak. Atarkende 2 idyi küçükten büyüğe doğru eklemek.

    Mesela : görenderen id 1 ve alıcı id 2 olsun. Php de sqle veriyi kaydetmeden önce bir değişkene idleri "-1-2" tanımlayıp sütuna kaydeder.
    Bu şekilde X sohbetin mesajlarında unique sütun elde etmiş olurum.

    Çekerken de bu sütuna göre group by yada distinct yaparım.

    Bu mantığın ne tür bi zararı olur.
     
    Son düzenleme: 25 Haziran 2017
  7. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    897
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    zekice,
    bu alan en baştaki key olursa, sorgu DB yi yormaz.
     
    exe676 bunu beğendi.
  8. exe676

    exe676 Üye

    Kayıt:
    29 Ağustos 2011
    Mesajlar:
    33
    Beğenilen Mesajlar:
    1
    sedirAğacı teşekkürler vakit ayırıp yardım ettiğin için. sayende geçici olarak böyle bir yöntem kullanacağım. umarım bir sıkıntı yaratmaz.

    çözüm :
    veri tabanına kayıt yaparken mesaj yollama sayfasında gönderen üye id ve alıcı idyi küçükten büyüğe şekilde ayarlayıp aralarına - karakterini koyuyoruz.
    örnek : mesaj yollayacak üye id 1. mesajı alacak olan üyenin id ise 2
    sqle kaydederken 1-2- diye kaydediyoruz...

    çıktı alırken ise kaydettiğimiz bu sütunu group by veya distinct yapıyoruz.

    örnek tablo yapısı ve içerik :
    [​IMG]

    örnek sorgu : SELECT kim, kime FROM mesajlar WHERE kim = 1 or kime = 1 GROUP BY baslik;
    çıktı :
    [​IMG]


    daha iyi çözüm bilen veya önerisi olan arkadaşlar da yazarsa iyi olur.
     
    Son düzenleme: 25 Haziran 2017
  9. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    341
    Beğenilen Mesajlar:
    88
    Şehir:
    Hatay
    Selamlar, buyur sana facebook mesajlaşma sistemini birebir kopyalayan bir arkadaşın paylaşımı :)
    Kayak ingilizce ama kod bilgin varsa baka baka anlayacaksındır sanıyorum. Çünkü ben de hiç ingilizce bilmem ama bu kaynağa bakarak facebook mesajlaşma sisteminin aynısını yaptım :)

    Link: Facebook Style Messaging System Database Design.
     
    exe676 ve sedirAğacı bunu beğendi.
  10. exe676

    exe676 Üye

    Kayıt:
    29 Ağustos 2011
    Mesajlar:
    33
    Beğenilen Mesajlar:
    1
    değerli yorumun için teşekkür ederim dinlex. verdiğin linki inceledim fakat tam kavrayamamakla beraber 3 tablo ile veri tabanında daha çok yer kapladığını düşünüyorum. bir önceki yorumumda sedirAğacı nın fikir vermesi üzerine kendimce bir çözüm bulmuştum. O çözüm hakkında yorumun veya yakın bir çözüm verirsen harikulade olur.

    zira linkteki makaleyi yetersiz ingilizceden kavrayamadım :D
     
  11. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    341
    Beğenilen Mesajlar:
    88
    Şehir:
    Hatay
    Senin yaptığına baktım ama kafam o kadar dolu ki niyeyse üzerinde düşünemedim fazla. Ama sen sorunsuz listeleyebildiysen mesajları o zaman sorun yok. Aynı şekilde üyeler silme işlemini de sorunsuz yapabiliyorsa bu benim önerdiğimden daha iyi ve daha hafif bir uygulama olmuştur.

    Benim verdiğimde 2 tablo ile yapılıyor. üçüncü tablo üyeler tablosu çünkü.
     
    exe676 bunu beğendi.
  12. izmiralem

    izmiralem Aktif Üye

    Kayıt:
    7 Şubat 2010
    Mesajlar:
    290
    Beğenilen Mesajlar:
    32
    Meslek:
    Bilgisayar Teknik Servis Hizmt.
    Şehir:
    izmir
    Facebook tarzı sohbetler ile çok uğraştım. Eğer bahsettiğin gibi gönderilen tüm mesajları gruplama yaparak herkes den yalnızca 1 kez dönsün dersen ileri ki zamanlarda mesaj sayısı çok yükseldikçe sayfan çok geç açılmaya başlar. Kii buda çok uzun bir zaman sürmez.

    Tavsiyem çift tablo kullanman.

    Birinci tabloya mesaj_okunma adını ver.

    Gonderen_Alici_Durum_MesajOzet_Tarih

    İkinci tabloya ise,

    Gonderen_Alici_Mesaj ... vs vs..

    Mesajlar sayfanda kontrollerini birinci tablodan getir. Mesajdan bir kaç kelime kısa özeti ile mesajın ön izlemesini, durum ile de mesajın görüldü bilgisini de alabilirsiniz.

    Kolay gelsin.
     
    exe676 bunu beğendi.