2010-01-25 5 views
0

Qu'est-ce que je veux dire en disant vrai "lié par tags" liste?Structure de données, meilleure pratique pour créer de véritables listes d'articles "liés par tags"?

Imaginons que l'article ait 3 étiquettes: A, B, C. Les articles "liés par étiquettes" pour cet article seront des articles ayant des étiquettes A, B, C, puis (A, B), (A, C), (B, C), etc.

tableau: les tags

tag_id 
tag_title 
tag_nicetitle 

Table: tags2articles

article_id 
tag_id 

L'utilisation de cette structure de tables est trop difficile pour calculer vrai "lié par des étiquettes".

Nous pouvons ajouter un autre tableau contenant article_id et c'est md5 (A, B, C). Avant de hacher, nous devrions trier les étiquettes par ordre alphabétique.

Table: article_tags_hashed

id 
article_id 
md5 
count 

Ce tableau nous aidera à trouver des articles contenant ensemble exacte des étiquettes (A, B, C), mais il ne va pas aider à trouver des articles contenant seulement (A , B), (A, C), (B, C)

Quelle est la meilleure pratique?

PS: Désolé pour mon anglais, c'est plutôt mauvais.

+0

Le faites-vous avec SQL et DB ou en Java/C++/autre langage impératif? – Dmitry

+0

Non, je le fais avec PHP/MySQL. Mais y a-t-il une différence quelle langue j'utilise pour cela? Il me semble être juste une structure de données et une question de performance. – Kirzilla

+0

Eh bien, vous n'avez pas de structures de données autres que des tables dans le SGBD, vous devez donc créer une requête. Si vous utilisiez un langage impératif, vous pouvez jouer avec les structures de données. – Dmitry

Répondre

1

Je ne pense pas que vous avez besoin article_tags_hashed parce que vous pouvez grouper et compter les résultats lorsque vous
requête les tags2articles.

Exemple:

select article_id, count(article_id) as tagcnt from tags2articles 
where tag_id in (...) 
group by article_id 
order by tagcnt desc 

Les articles qui contiennent le plus de balises seront placées en premier.

+0

Belle requête, mais cela fonctionnera-t-il rapidement avec d'énormes tables? – Kirzilla

+0

@Kirzilla, si les 'id' sont des clés alors oui, ça devrait être rapide. Vous pouvez même définir une limite pour les résultats. c'est-à-dire que vous pouvez * demander * d'obtenir au plus 15 articles. –

Questions connexes