Karşılıklı Mesaj Sistemi Mantığı

SQL

13 Mayıs 2018

Tekrardan merhaba facebook gruplarında çok fazla bu sorunun sorulduğunu görüyorum yanlış doğru bir kaç cevap veriliyor. Zamanında bir sosyal ağ sistemi yaptığımdan dolayı facebooktaki mesaj sistemini de yapmıştım. Öncelikle şunu belirtmek istiyorum bu işi tek bir mesaj tablosuyla’da yapanlar oluyor ama bana göre çift tablo daha sağlıklı.

Önce facebooktaki olayı şöyle özetleyeyim; Ali beni arkadaş listesine ekleyip ilk mesaj attığında “konusmalar” tablosuna ikimizinde kullanıcı id’si ekleniyor. Bir konuşma başlangıcı için taban hazırlıyor bu durum. Mesajlaşma başladığında ise “mesajlar” tablosuna yazılan her mesaj tek tek kaydediliyor.

Konuşmalar Tablosu:

CREATE TABLE IF NOT EXISTS `konusmalar` (
  `konusma_id` int(11) NOT NULL AUTO_INCREMENT,
  `kullanici_bir` int(11) NOT NULL,
  `kullanici_iki` int(11) NOT NULL,
  PRIMARY KEY (`konusma_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Mesajlar Tablosu:

CREATE TABLE IF NOT EXISTS `mesajlar` (
  `mesaj_id` int(11) NOT NULL AUTO_INCREMENT,
  `konusma_id` int(11) NOT NULL,
  `mesaj_kime` int(11) NOT NULL,
  `mesaj_kimden` int(11) NOT NULL,
  `mesaj` text CHARACTER SET utf8 COLLATE utf8_turkish_ci NOT NULL,
  `mesaj_tarih` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`mesaj_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Mesajlar tablosunda isterseniz mesaj_kimden ve mesaj_kime kısmını kaldırıp(gerçekten gerek yok ama ben garanti olsun diye eklemiştim) konuşma tablosunun “konusma_id”si ile mesajlar tablosundaki “konusma_id” yi eşitleyip mesajı kimin kime gönderdiğini bulabilirsiniz. PHP tarafını da yazmak isterdim ama mantığı öğrenmeden kopyala yapıştır yapacak arkadaşlar olacağından dolayı pek yazma taraftarı değilim.