• 02-06-2015, 17:33:57
    #1
    Merhabalar,

    Uzun zamandır kafama takılan bir soru var ve bu konuda bana yardımcı olabileceğinizi düşünerek konu açmak istedim.

    Örneğin bir sitemiz var ve bu site üzerinde mesaj sistemi olacak.

    Bir kişi yeni mesaj yazmaya girdi ve alıcılar kısmına 5-6 farklı kişiyi girdi. Bu 5-6 kişi için veritabanında her birisi için kolon oluşturacak halimiz yok ya. Elbette hepsini tek bir kolonda tutmayı tercih ederiz ama bunu en mantıklı şekilde nasıl tutarız?

    Diyelim ki dizi değişken şeklinde bunu kaydetmek istedik, nasıl olacak? Daha sonra benim bu kolonlarda bir arama yapmam gerekiyorsa nasıl yapacağım?
  • 02-06-2015, 19:38:04
    #2
    Bu kadar soruyla uğraşmamak için her birini tek tek satır olarak eklerim ben
  • 03-06-2015, 01:26:17
    #3
    Üyeliği durduruldu
    tam anlamadım ama toplu mesajlaşma için 1,2,3 gibi eklete bilirsiniz sonra explode ile virgüllere göre ayırtırsınız sorun falan kalmaz multi kategori mantığı ile aynı dediğiniz şey fark yok tabi ben doğru anladı isem.
  • 03-06-2015, 02:04:56
    #4
    mesajlar tablosu olur
    id ve mesaj dan oluşur.
    birde gonderilenler diye bir tablo olur
    gönderenin_id - - - - alıcı_id - - - mesaj_id
    sutunlardan oluşursa sınırsız kişiye gitmiş olur. ilk aklıma gelen çözüm bu.
  • 03-06-2015, 10:24:36
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    array değişkeni datebasede 1 hücreye yazmak isiyorsanız ben genelde json_encode ile json a çevirim değişkene çeviriyorum.

    tekrar çağırınca json_decode ile tekrar diziye çeviriyorum.
  • 03-06-2015, 11:38:29
    #6
    serialize
  • 03-06-2015, 16:50:00
    #7
    alicilar diye bir satır oluşturun, satıra alıcı kişileri virgül ile ayırarak yazın, sonra alıcı kişi mesaj okumak istediğinden alici satırında "%,alici_ismi,%" şeklinde select yaparsınız.

    yani örnek alıcı satırı;
    ,alıcı 1,alıcı 2, alıcı 3,

    alıcı1 mesajlarını okumak istediğinde %,alıcı 1,% şeklinde çağırırsınız.

    Bir mesajı alan herkesi sıralamak isterseniz de explode ile alicilar satırını virgüllere bölersiniz, 1. indexten boş olan indexe kadar sıralatırsını.

    Ayrıca ek olarak alıcıların idleri varsa, burada alicilar satırına kişileri id ile kaydetmek daha efficient olacaktır;

    örnek alicilar satırı;
    ,522,214,102,

    gibi.

    Not: birgüllerin select işlemde kullanılması conflict'i önlemek amaçlı, yani aynı mesajı hem 1041 idli kişi hem de 104 idli kişi almış olabilir, 104 idsi ile arama yapıldığında karşımıza 1041 idlileri de çıkartacaktır, bunu istemediğimizden aramayı ",104," olarak yaparız gibi.

    Kolay gelsin.
  • 03-06-2015, 21:09:10
    #8
    Kimlik doğrulama veya yönetimden onay bekliyor.
    json_encode veya serialize ile kolayca ve düzenli bir şekilde işlemi yapabilirsiniz. bunları direkt olarak tekrar dizi şekline getirebildiğiniz için, explode vs kullanmaktan daha avantajlı bir kullanım olur.
  • 03-06-2015, 22:41:49
    #9
    Hocam foreach denilen bir döngü var ya bir de explode denilen bir fonksiyon var. Diyelimki alıcıların arasına , koydun

    $alicilar = explode(",",$_POST["alicilar"]);
    foreach($alicilar as $row)
    {
    insert into mesajlar values($row,$_POST["mesaj"]);
    }

    gibi yapabilirsin tam kod yazmadım fikir olsun diye yazdım.

    Veritabanı yapını şöyle kurman gerek

    1 Kullancıılar tablosu

    kullaniciid kullaniciadi

    mesajlar tablosu
    mesajid aliciid mesaj