2009-01-29 4 views
0

Après avoir suivi la recommandation this concernant la structure des tables de balises, j'ai mis la conception suivante:Quelle est la meilleure façon d'afficher le nombre d'éléments liés aux tags?

Table: Item 
Columns: ItemID, Title, Content 

Table: Tag 
Columns: TagID, Title 

Table: ItemTag 
Columns: ItemID, TagID 

Je suis face à un autre problème, je veux afficher le numéro de chaque balise apparaît dans le système. Quelle est la meilleure façon de le faire en termes de requête de recherche/code php qui ne causera pas un impact sévère sur les performances (le nombre de tags apparaîtra pour chaque élément).

Merci,

Roy

Répondre

2
select count(*) 
from ItemTag 
where TagId = X 

est mySQL qui obtenir dynamiquement. Si vous êtes inquiet au sujet de la baisse de performance, vous devez stocker un nombre dans la table des variables et l'incrémenter/décrémenter lorsque vous marquez ou décochez un élément.

+0

Le fait de stocker le nombre d'étiquettes dans la table d'étiquettes fera l'affaire. Merci! –

+0

Je ne stockerais pas le compte. Cela risque de se désynchroniser, et vous devrez faire des requêtes périodiques pour vous assurer que c'est correct. Utilisez la solution SELECT COUNT (*), car elle sera toujours précise. Activez le cache de requêtes MySQL comme moyen transparent d'améliorer les performances. –

2

Assurez-vous que les éléments suivants (SQL) obtiendront tous les titres de balises et les comptes associés de la fréquence à laquelle ils apparaissent sur les éléments.

select tag.title, count(itemtag.tagid) 
from tag, itemtag 
where itemtag.tagid = tag.tagid 
group by tag.title 
1
SELECT Tag.Title, COUNT(Tag.TagID) AS TagCount 
FROM ItemTag 
LEFT JOIN Tag ON 
(ItemTag.TagID = Tag.TagID) 
GROUP BY Tag.Title 
ORDER BY Tag.Title 

vous donne une liste des balises (ni ordre alphabétique) suivie par le nombre de fois qu'ils sont utilisés contre un élément. Les tags non utilisés n'apparaissent pas.

+0

Il n'y a pas de raison de faire cela une jointure à gauche. –

Questions connexes