Php ortak arkadaş sistemi mantığı nasıl?
13
●2.976
- 19-08-2010, 13:44:38Üyeliği durduruldubirazcık sql bilgisiyle yapılabilir arkadas iliskini tutan bir tablomus olsun bir de kullanici
benim kullanici kodum 1 olsun sizin 2 , ortak arkadaşımız da 3 nolu kişi olsun
$sql = ; "SELECT ar2.kullanici FROM kullanicilar ku LEFT JOIN arkadaslik ar ON ar.kullanici = ku.id JOIN arkadaslik ar2 ON ar2.arkadas = ar.arkadas WHERE ku.id = 1 AND ar2.kullanici = 2 "
bu sorgu hem 1 hem de 2 nin arkadaşları olan kişilerin ID lerini verir.
arakdaşları tuttuğunuz tablolara göre sorgu da değişebilir. ben arada bir ilişki tablosu olduğunu varsaydım. cook farlı yontemlerle yapabilirsiniz - 19-08-2010, 14:15:47teşekkür ederim ama bunu zaten yapıyorum benim istediğim ortak arkadaşlardı.by_grafitus adlı üyeden alıntı: mesajı görüntüle
- 20-08-2010, 17:50:48Üyeliği durdurulduarkadaşları böyle saklamanız yanlış, çok kısıtlamış oluyorsunuz, akradaş idlerini alıp tekrar sorgulamak ya da in() ifadesi ile tabloları bağlamak arkadaş asyısı arttıkça ağırlaşmaya neden olacaktır.Muzo adlı üyeden alıntı: mesajı görüntüle
tablo yapınızı değiştirip tekrar yazabilir misinz ? - 21-08-2010, 02:29:45Üyeliği durdurulduaslnda bende kafamı kurcalamıştım...
aklıma bişi gelmedi - 21-08-2010, 05:08:25Arkadaş id'lerini bu şekilde tutuyorsan zamanla ağırlaşabilir sistemin. Ama illaki böyle yapacağım diyorsan sql aratmasında regexp kullanarak başarabilirsin;
kullanıcı id'si : x
görüntülenen profilin id'si : y
select * from kullanicilar where friends regexp (burada regexp ifadesi olacak)
Regexp ile aram pek iyi değil ama şunun gibi olacak; ,x,(.*?),y,
Bu eksik ama, x ve y kullanıcılarının id'leri arka arkaya kayıtlıysa bulamaz mesela.
--
Ben olsam yeni bir tablo oluşturmayı tercih ederdim. Onu da şöyle yapabilirsin;
arkadaşlık ilişkilerini barındıran yeni bir tablo oluşturmalısın. Bu tablonun içinde user_id ve friend_id kolonları bulunur. Bunu oluşturduktan sonra kullanıcı tablona gir ve şunları yap;
(Kaba kod olarak yazıyorum, bu şekliyle çalışmaz sadece mantığı gösterir)
select * from kullanicilar { $friends = explode(',',$arkadaskolonu); foreach($friends as $f) { insert into relationship (idkolonu, $f) } }Bu mantıkla çalışan bir kod yazıp bir kere çalıştırırsan, relationship tablosunda arkadaşlık ilişkileri eklenmiş olacak. Daha sonraki arkadaşlık işlemlerinde de tekrar bu tabloya kaydedilmeli. Ortak arkadaşları da bu tabloyu tarayarak bulabilirsin.