1. Sistem (Kullanmakta olduÄŸum.) :
- Etiketlerin tutulduÄŸu "tags" tablosu var.
- İçeriklerin tutulduğu "articles" tablosu var.
İçeriğin etiketleri "articles" tablosundaki ilgili içeriğin "tags" kolonunda "," (virgül)'lerle ayrılarak tutuluyor. Etiketler listelenirken "explode" fonksiyonu kullanılıyor.
Herhangi bir etikete ait içerikleri listelemek için ise:
SELECT * FROM articles WHERE MATCH(tags) AGAINST ('aranan_tag')gibi FULLTEXT SEARCH yapısını kullanıyorum.2. Sistem (Kullanmayı Planladığım) :
- Etiketlerin tutulduÄŸu "tags" tablosu olacak.
- İçeriklerin tutulduğu "articles" tablosu olacak.
- Etiketlenen içeriklerin tutulduğu "tagged" tablosu olacak. Tablo alanları yaklaşık aşağıdaki gibi olacak :
- id
- tag_id
- article_id
Bu sistemde içeriğe ait etiketleri listelemek için :
SELECT * FROM tagged WHERE article_id=active_article_idgibi bir sorgu kullanılacak.
Herhangi bir etikete ait içerikleri listelemek için ise :
SELECT * FROM tagged WHERE tag_id=active_tag_idsorgusuyla önce o etiketle etiketlenmiş içeriklerin id'leri çekilecek, sonra ise :
foreach($selected_articles as $value) {$article=SELECT * FROM articles WHERE article_id=$value}gibi bir döngüyle çekilen id'lere ait içerikler çekilecek.2. Yöntem daha düzenli görünüyor. Fakat hangisi daha performanslı olur?