Cevaplar
-
"istek_gonderen" "istek_alan" ve "onay" kolonları bulunan (tabii siz bu kolonları kendi isteiğinize göre artırabilirsiniz) bir tablo oluşturulabilir. birisi bir kullanıcıya arkadaşlık teklif ettiğinde teklif edenin ismini istek_gonderen kısmına, isteği alan kullanıcının adını "istek_alan" kolonuna ve onay verilip verilmeme durumuna göre onay kolonuna yes/no şeklinde bir veri girilebilir. kullanıcının arkadaşlarını sıralamak vs. zaten kolay bu noktadan sonra.
-
acemi
benim istediğim bu adımdan sonra ki aşamadır yani kullanıcı isteği kabul ettiğinde Kullanıcının arkdaşlarını nasıl tutmalıyım tablo da.
şöyle düşünelim ;
benim 600 arkadaşım var ve bu arkadaşlarımın arasında seninde olduğunu varsayalım.geriye 599 arkadaşım kalıyor ve bu arkdaşlardan da 500 kişisi seninlede arkadaş olduğunu varsayalım peki bu durumda nasıl tutacağım bunu tabloda10 yıl önce yazılmış
-
-
Öncelikle normal bir "uyeler" isminde tablo açın ve üye olan kişileri bu alana yazdırın. Ardından
"arkadaslik" isminde tablo açın ve sütunları şu şekilde olsun:
- id | uyeid | teklifeden | onay
Arkadaş olmak isteyen kişi "Arkadaşlık İsteği Gönder" dediği zaman, o anki gözüken profilin ( arkadaşlık isteği gönderilen kişi ) "id" sini GET ile veya sayfa içinde mysql sorgusu yaptırıp veritabanından alıp "uyeid" kısmına,
* teklif eden kişinin bilgilerini ise o anki oturum bilgilerinden ( Session || Cookie ) alıp "teklifeden" kısmına yazdırmalısın.
* onay alanı ise "int" olarak hazırlayıp varsayılan olarak 0 olması gerekir.
Kullanıcının arkadaşlığı onaylaması içinde;
* Kullanıcı profilinde bir sayfada "arkadaslik" tablosundaki "uyeid" kısmındaki verileri kendi id si ile isteyerek sadece "onay" kısmı 0 olan kayıtları listeletmelisin.
* Sonra onay işlemi gerçekleşince onay alanını 1 olarak güncelleyeceksin ve arkadaşlarım sayfasında sadece "uyeid" si kendi profil id sine eşit olan verilerle birlikte sadece "onay" kısmı 1 olan kayıtları listeletmen gerekir. Örnek MySql Sorgusu:
Arkadaşlık Tekliflerini Göstermen İçin:mysql_query("SELECT * FROM arkadaslik WHERE uyeid='$profilid' and onay='0'");
Arkadaşlarını Göstermek İçin:mysql_query("SELECT * FROM arkadaslik WHERE uyeid='$profilid' and onay='1'");
basit olarak bu şekilde kendin geliştirebilirsin..Kolay gelsin.-
acemi
öncelikle cevap veripte zaman ayırdığınız için teşekkür ediyorum.
ama benim tam olarak istediğim;
düşün benim arkdaş listem şu şekilde olsun
benim listem:
*ali
*ahmet
*mehmet
*ayşe
*fatma
*zeynep
benim arkdaşım olan alinin listesi
*ahmet
*mehmet
*ayşe
*fatma
*zeynep
*nuri
gibi gördüğünz gibi aynı isimler tabloda birden fazla kullanılıyor yani kayıtlar tabloda tekrarlanıyor 500 kişilik bir üye olduğunu düşünelim ve bunların hepsi bir biri ile arkdaş olduğunu düşünün bu tablonun boyutu ne olur(500x500) bu sadece 500 kişilk bir uye için peki 1 milyon kişi olduğunu varsayalım bu kez (1000000x1000000) gördüğünüz gibi korkunç bir durum...10 yıl önce yazılmış
-
-
üyeler tablosu içeriği;
uye_id, diğer bilgiler
iliskiler tablosu içeriği;
iliski_id, uye1, uye2, onay
bir üye ötekine istek gönderdiğinde, (auto, istek gönderen üye id'si, istek alan üye id'si, 0) olarak ilişkiler tablosuna eklenir. onaylandığında ise onay kısmı 1 yapılır ve şu satır ayrıca eklenir; (auto, istek alan üye id'si, istek gönderen üye id'si, 1).
bu yapı oluşturulduktan sonra ortak arkadaşları bulurken şu sorgu çalıştırılır;
SELECT DISTINCT uye2
FROM iliskiler
WHERE uye2
IN (
SELECT uye2
FROM iliskiler
WHERE uye1 = (1. üyenin id'si)
OR uye1 = (2. üyenin id'si)
GROUP BY uye2
HAVING count( * ) =2
)
AND ok =1
bu şekilde 500 kullanıcı olduğunda hepsi birbirine ekliyse iliskiler tablosunda 500*500 satır veri olacak. 1 milyon kullanıcının hepsi birbirine ekliyse aynı şekilde 1m^2 satır veri olacak fakat 1 milyon aktif kullanıcısı olan bir sistem için bu büyük bir problem sayılmaz. facebook kadar aktif ve yoğun kullanılacak bir sistem yapılması düşünülüyorsa ona göre bir yatırımı da olmalı tabii.
bunlar bir yana sql cache şeklinde muhabbetler de var, benim bu konuda pek bilgim yok ama aratıp birkaç makale okursanız büyük ihtimalle işinize yarar. -
yardımlarınız çin tsklr arkdaşlar ama tam olarak istediğim gibi bir çözüm bulamadım..:(
-
Alpagu
Güzel bir soru ve benimde yakında karşılaşacağım bir sorundu. Diğer arkadaşların yazdığı gibi tek çözümü var sanırım. Büyük ihtimalle milyon üyenin olduğu bir sistemdede ona göre bir alt yapı ve server güncellenmesi gerekecek bu nedenden dolayı olayı sorgulama ile optimize etmek bir yerden sonra Yazılanlardan anladığım kadarıyla imkansızlaşıyor. Orada Donanımsal yatırımlara ihtiyaç duyuruluyor.
Bir arkadaş bahsetmiş ama ismini vermemiş. Benimde şuan üzerinde çalışığım "stored procedure" yöntemini yazni sql cache yöntemini sende araştıra bilirsin.
Umarım işine yarar bir açıklama olmuştur.10 yıl önce yazılmış
-