[Web/Algo] Techno pour des "tags" - comment rester à la mode :)

Saloute à toutes et à tous :jap:

Je me poses la question de connaître un peu la technique qu’il y’a derrière la mode des “tags” sur les sites webs “tendance web 2.0” du moment :oui: …

Vous savez, on permet à un utilisateur d’associer différents mots-clés à un article du site, et ensuite ces mots-clés se retrouvent sur la page principale de ce site … plus ils sont associés à des articles, plus ils sont gros, et donc susceptible d’être cliqué …

Exemple sur Jamendo[/url], [url=http://devzone.zend.com/public/tagcloud]Zend DevZone, etc …

La question est donc de savoir quelle technique "générique" on peut utiliser pour proposer ce genre de fonctionnalité sur nos sites web :jap: …

La première idée que j’ai (la plus basique) consiste à créer une table avec les mots-clés :


+----------------+--------------+---------------+
| id_keyword | keywords | popularity |
+----------------+--------------+---------------+

avec :
(bigint) id_keyword : identifiant unique du mot clé
(string) keywords : un seul mot clé unique
(int) popularity : le nombre d’article associé à ce mot clé (pour éviter de tout recalculer à chaque affichage)

et une autre table qui associerait l’id_keyword à un id_article :


+--------------+----------------+
 | id_article | id_keyword |
+--------------+----------------+

par contre, je me rends compte que ça peut rapidement générer des tables assez gigantesques, sur lesquels la recherche peut donc être longue :neutre: …

A vos idées :jap:

Edit : fatigues, fautes, toussa :whistle:

Ta technique me semble bonne (c’est comme ça que je le voyais). Pour la rapidité, je doute que tu puisse faire mieux : c’est déjà assez petit, donc bon…

Fait confiance aux INDEX :stuck_out_tongue:

Et en fait, je crois que tu même pouvoir optimiser la recherche sur les mots clefs en conservant les ensembles (tableaux d’int, etc) sans passer par un index/etc.

mieux, la popularity pourrait être calculée par un bon vieux select … count… group by.

toujours garantir l’unicité des données pour garder la cohérence (une base normée)

quitte à faire ensuite une table temporaire de cache “en plus” si problème de perf :smiley: mais il faut d’abord partir droit, et ensuite contourner les problèmes uniquement s’ils surviennent.

+1

Puis ça fait de la redondance = mal

Le plugin de tag de Dotclear 1 duplique les tags, donc la table est assez grande.

Mais avec ça il est assez facile de les compter et de faire des recherches.