Bir etiketi başka bir bağlı ne sıklıkta takip etmek gerekir. Gibi, "php" ve "sql-server" 3 olabilir iken, "php" ve "mysql" payı 50 makaleleri (veya ne olursa olsun yadsınacaktır ana içeriği) söylüyorlar ve "php" ve "apache" 25 var. So Verilen "php," Eğer (muhtemelen yol kenarına için "sql-server" güz izin) bu sırayla "mysql" ve "apache" geri dönmek isterdim.
Hiçbir şekilde sadece (ben şimdi görüyorum, ve stephenc cevabı üzerinde genişleyen tür) yüksek sesle düşünerek, bu idealdir:
CREATE TABLE tag_relations (
tag_id int unsigned not null,
related_tag_id int unsigned not null,
relation_count smallint unsigned not null,
PRIMARY KEY (tag_id, related_tag_id),
KEY relation_count (relation_count)
);
Sonra 1 ile relation_count artan bir makalede, diğer tüm etiketleri ve INSERT / UPDATE döngü, bağlı her benzersiz etiket için. Araçları ("php", "mysql") ve ("mysql", "php") tamamen iki That Farklı ilişkileri muhafaza edilecek, ancak arama kavramlar aracılığıyla kazma olmadan ben muhtemelen unutmuş, hala işlev olacak. Şey 10 + etiketleri varsa, güncellemeleri (belki stephenc gibi önerdi cron bu pass) çok yavaş olacak, ancak bu şekilde arama yapmak daha kolay olacak. Güzel ve çok basit gibi:
SELECT related_tag_id, COUNT(relation_count) AS total_relations
FROM tag_relations
WHERE tag_id IN ([list,of,tag,IDs,to,compare])
// AND tag_id NOT IN ([list,of,tag,IDs,to,compare]) -- probably
GROUP BY related_tag_id
ORDER BY total_relations DESC
Her iki tag_id
& karşı denetlemek zorunda daha kolay related_tag_id
ve sorgular bir karmaşa yoluyla Özetle, en azından. Gerçek tagnames & almak için etiketleri masaya JOIN hazırsınız.
Eğer "php" ve "mysql," yukarı arıyorsanız ve "apache" sık sık hem ilgilidir eğer sayma & beri Yani, en yakın olacak Her ortak ilişkiyi ağırlık. Kesinlikle olsa ortak bağlantıları sınırlamak, yani HAVING total_relations >= x
(x keyfi bir kesim olma) ve / veya sadece normal LIMIT x
alakalı şeyler tutmak eklemek olmaz.
(Not:. Bu hatta biraz kullanışlı olduğunu düşünerek önce bu dışarı halt araştırma - Ben orada bazı bilinen algoritma olduğunu 100x zeki dışarı var ve ben sadece bunu hatırlayarak değilim eminim)
PHPro.org benzer bir fikri kullanarak, çok bir good writeup vardır.