• 19-08-2010, 13:31:26
    #1
    ---
  • 19-08-2010, 13:44:38
    #2
    Üyeliği durduruldu
    birazcı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:03:18
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Şöyle yaparsın:

    arkadaşlıklar tablon şöyle olur: id_üye, arkadaslar
    arkadaşlar sütununda arkaşlarınının IDlerini , le eklersin. Birinin arkadaşlarını göstereceğin zaman da explode(',', $dbdengelenveri['arkadaslar']);
  • 19-08-2010, 14:15:47
    #4
    by_grafitus adlı üyeden alıntı: mesajı görüntüle
    Şöyle yaparsın:

    arkadaşlıklar tablon şöyle olur: id_üye, arkadaslar
    arkadaşlar sütununda arkaşlarınının IDlerini , le eklersin. Birinin arkadaşlarını göstereceğin zaman da explode(',', $dbdengelenveri['arkadaslar']);
    teşekkür ederim ama bunu zaten yapıyorum benim istediğim ortak arkadaşlardı.
  • 19-08-2010, 15:38:46
    #5
    konu güncel hala net bir sonuç yok.
  • 19-08-2010, 17:16:59
    #6
    Üyeliği durduruldu
    Tablo yapılarınızı yazarsanız ortak arkadaşları bulbilecek sorguyu yazarız. yapıyı bilmeden yazamayız
  • 20-08-2010, 17:50:48
    #7
    Üyeliği durduruldu
    Muzo adlı üyeden alıntı: mesajı görüntüle
    Üyeler tablosu
    Sütun Örnek
    ID = 5
    Adi = deneme
    Arkadaslari = 5,6,8,9 (id'leri)

    şeklinde bunun dışında arkadaşlıkları kaydeden bir tablom yok, gerekiyorsa öyle yaparım.
    arkadaş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.

    tablo yapınızı değiştirip tekrar yazabilir misinz ?
  • 21-08-2010, 02:29:45
    #8
    Üyeliği durduruldu
    aslnda bende kafamı kurcalamıştım...
    aklıma bişi gelmedi
  • 21-08-2010, 05:08:25
    #9
    Arkadaş 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.