Bonjour à tous,
Afin de réaliser un nuage de mots clés (tag cloud), j'ai besoin de sortir les X occurrences les plus fréquentes d'un champ tag contenant des tags séparés par une virgule.
Si vous avez des idées.. moi je sèche.
Bonjour à tous,
Afin de réaliser un nuage de mots clés (tag cloud), j'ai besoin de sortir les X occurrences les plus fréquentes d'un champ tag contenant des tags séparés par une virgule.
Si vous avez des idées.. moi je sèche.
Bonjour,
Tu ne peux pas normaliser ces informations :
les mettres chacun dans une table ?
Z.
J'ai trouvé une solution "alternative".
Pour la fonction tag_cloud, j'ai modifié celle issue de ce site : pckult.net en passant directement après la mise en tableau des résultats de la requête.
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 $query=mysql_query("SELECT tag FROM ma_table"); if(mysql_num_rows($query)!=0){ $ar=array(); while($result=mysql_fetch_array($query)){ $temp=explode(',', $result['tag']); if(is_array($temp)){ for($i=0;$i<count($temp); $i++){ $ar[trim($temp[$i])]=(isset($ar[$temp[$i]]))?($ar[$temp[$i]]+1):1; } } } tag_cloud($ar); }
Zwiter> Tu veux dire mettre un tag par enregistrement dans une table tag.
Je trouve ça moins pratique pour la gestion des liaisons avec les articles (modification, ajout et suppression de tags).
Mais, je ne suis probablement pas normal
tu as une table article avec ton article, ou ce que tu veeux.
Tu as une table tag, avec ton tag, et eventuellement des infos dessus.
Et enfin une table tag_article qui contiendra uniquement les champs id du tag et id de l'article.
Donc pour selectionner les tags d'un article :
SELECT tag_name
FROM tag, tag_article, article
WHERE tag.id_tag=tag_article.id_tag AND article.id_article=tag_article.id_article;
Selectionner tous les tags avec leurs occurences :
SELECT tag_name, count(*) AS occurences
FROM tag, tag_article
WHERE tag.id_tag=tag_article.id_tag
GROUP BY tag_name
ORDER BY occurences DESC;
Et pour finir :
Selectionner les 10 1er tags :
Selectionner tous les tags avec leurs occurences :
SELECT tag_name, count(*) AS occurences
FROM tag, tag_article
WHERE tag.id_tag=tag_article.id_tag
GROUP BY tag_name
ORDER BY occurences DESC
LIMIT 10;
Question subsidiaire que je te laisse cogiter (ca pourrais te concerner dans la solution que tu as choisi) :
Tes 20 1ers tags ont tous une occurence de 1 : lesquels selectionnes tu si tu veux les 10 1ers ?
Z.
Je botte en touche !
Moi je fais pas de limit, j'affiche tous les tags.
Etant une personne sensée, je ne vais pas avoir 300 tags
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager