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?
Veritabanına Dizi Kaydetme Yöntemleri
11
●3.529
- 02-06-2015, 17:33:57
- 03-06-2015, 01:26:17Üyeliği durduruldutam 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, 10:24:36Kimlik 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, 16:50:00alicilar 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, 22:41:49Hocam 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