• 11-07-2009, 23:43:51
    #10
    "Tam sorulan bu değilmiş sonradan farkettim ama yine de o kadar yazdım dursun"

    Wordpressdeki gibi etiketlere tıklandığında o etiketlere sahip yazıları görmek istiyorsun..
    Bunun için yapacağın şey şu:
    3 adet tabloya ihtiyacın var..
    Yazilar tablosu:
    yazi_id: integer
    baslik : varchar
    icerik : text
    ---
    etiketler tablosu
    etiket_id: integer
    etiket: varchar(255)
    ---
    yazi_etiket tablosu:
    yazi_id
    etiket_id
    ------>
    Şimdi farzedelim bir yazı ekleyeceksin
    yazi_id=1 --- baslik= "İlk yazi" --- icerik=" Doldu taşıyor yazılar" (etiketler: makale,kitap)
    Şimdi etiketleri oluşturacağız.
    etiket tablosuna
    etiket_id=1 --- etiket="makale"
    etiket_id=2 --- etiket="kitap"
    diye iki tane girdi oluşturdun.. (önceden olup olmadıklarını kontrol et)
    Sonra yazi_etiket tablosuna:
    yazi_id=1 --- etiket_id=1
    yazi_id=1 --- etiket_id=2
    diye satırlar eklemen lazım..
    Artık yazıların etiketlendi.
    Şimdi farzedelim yazi_id=1 olan yazının etiketlerini görmek istiyorsun.
    Select etiketler.etiket from yazi_etiket, etiketler where yazi_etiket.yazi_id=1;
    Bunların hepsini yapabilmen için veritabanı tasarımı konusunda bilgi sahibi olmasın. Foreign key vs nedir bilmelisin.
    Tabi ki tag sisteminin kendi ayrıntıları olabilir. Ben basit bir örnek ve tasarım yaptım.
    Konuyla ilgili etiketleri de söyleyeyim :
    ForeignKey, Many to Many Relationship
  • 12-07-2009, 00:10:22
    #11
    lambri'nin verdiği yöntemi kullanan bir sınıf vardı.
    freetag - Google Code
    Örnek olması açısından inceleyebilirsin.
  • 12-07-2009, 00:11:36
    #12
    Z9Real adlı üyeden alıntı: mesajı görüntüle
    peki hocam ben etiketleri eklerken virgül koydugumda yani wordpress sistemindeki gibi ekledigimde o eklenen verileri nasıl ekletebilirim..

    Yani



    ekledigimde



    veritabanına bu şekilde ayrı ayrı yazacak ?
    Burti adlı üyeden alıntı: mesajı görüntüle
    <? 
    $keyword ="Küçük emrah japonca konuşup fort yapıyor geyik"; 
    $kelimeler = explode(' ', $keyword); 
    foreach ($kelimeler as $anahtar=>$deger) { 
    // burda "$deger'i" db ye kaydet
    } 
    ?>
    adasd
  • 14-07-2009, 13:39:33
    #14
    lambri adlı üyeden alıntı: mesajı görüntüle
    "Tam sorulan bu değilmiş sonradan farkettim ama yine de o kadar yazdım dursun"

    Wordpressdeki gibi etiketlere tıklandığında o etiketlere sahip yazıları görmek istiyorsun..
    Bunun için yapacağın şey şu:
    3 adet tabloya ihtiyacın var..
    Yazilar tablosu:
    yazi_id: integer
    baslik : varchar
    icerik : text
    ---
    etiketler tablosu
    etiket_id: integer
    etiket: varchar(255)
    ---
    yazi_etiket tablosu:
    yazi_id
    etiket_id
    ------>
    Şimdi farzedelim bir yazı ekleyeceksin
    yazi_id=1 --- baslik= "İlk yazi" --- icerik=" Doldu taşıyor yazılar" (etiketler: makale,kitap)
    Şimdi etiketleri oluşturacağız.
    etiket tablosuna
    etiket_id=1 --- etiket="makale"
    etiket_id=2 --- etiket="kitap"
    diye iki tane girdi oluşturdun.. (önceden olup olmadıklarını kontrol et)
    Sonra yazi_etiket tablosuna:
    yazi_id=1 --- etiket_id=1
    yazi_id=1 --- etiket_id=2
    diye satırlar eklemen lazım..
    Artık yazıların etiketlendi.
    Şimdi farzedelim yazi_id=1 olan yazının etiketlerini görmek istiyorsun.
    Select etiketler.etiket from yazi_etiket, etiketler where yazi_etiket.yazi_id=1;
    Bunların hepsini yapabilmen için veritabanı tasarımı konusunda bilgi sahibi olmasın. Foreign key vs nedir bilmelisin.
    Tabi ki tag sisteminin kendi ayrıntıları olabilir. Ben basit bir örnek ve tasarım yaptım.
    Konuyla ilgili etiketleri de söyleyeyim :
    ForeignKey, Many to Many Relationship
    Verdiğiniz örnek güzel teşekkürler. Ancak yazi_etiket diye ayrı bir tablo açmak yerine
    etiketler tablosunda bir alan daha açıp etiketin hangi yazilara verildiği eklense daha iyi olmaz mı?
    Yani etiketler tablosunda bir alan daha olsun. -yazi diye mesela - Ve bu alana o etiketi alan yazıların id leri kaydedilsin. 1,4,56,12 gibi...
    Hem bu sayede arama işlemi de kolaylaşmış olur ve veritabanında daha az yer kaplanmış olur. Mesela oyun etiketli yazıları bulmak için:
    SELECT * FROM etiketler_tablosu WHERE etiket=oyun
    deyiveririz olur biter.
    Yanlışım varsa belirtiniz. İyi çalışmalar...