[RESOLU] Tag cloud => Méthode originale
10 messages • Page 1 sur 1
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
-

Mountain Magazin - WRInaute impliqué

- Messages: 447
- Inscription: Ven Oct 01, 2004 10:27
[RESOLU] Tag cloud => Méthode originale
Bonjour, j'aurais besoin d'un coup de main.
Je veux créer un tag cloud maison, parce que je ne trouve pas ce que je veux sur le Web.
Voici mon idée. Bcp de webmaster vu les sources trouvées accumulent dans une BDD à 2 champs les requêtes des recherches (clé primaire + tag), ce qui peut faire des miliers d'enregistrement dans la BDD.
Ensuite il faut créer un index et regrouper les mots similaires par un GROUP BY
J'essaie de faire autrement.
Voici ma table :
id_tag //clé primaire
tag //les mots clé ou expressions clé UNIQUES selon si recherche "tous les mots", "un mot" ou "expression exacte"
popularite //nombre d'occurences des recherches pour chaque mot ou expression uniques
Je sais pas si c'est clair. Plutôt que d'enregistrer 10 fois le même mot, je l'enregistre 1 seule fois avec une popularité de 10.
Ça évite de charger la BDD, c'est une gestion des enregistrements faite en amont en PHP.
Bon déjà je suis ouvert aux avis sur la méthode, au départ, plutôt que sur une autre.
Voilà maintenant mon pb. Je n'arrive pas à faire une requête SQL qui me permette de sélectionner les X tags les plus populaires, avec un affichage aléatoire de ces tags.
J'ai aussi besoin de recupérer le cumul de popularité (somme des champs popularité) pour les occurences sélectionnées par la requête.
Ainsi avec une règle de trois, je pourrais déterminé un ratio, qui va déterminer la taille et la couleur d'affichage du tag dans le nuage.
J'espère être clair. Cette requête est surement pas très compliquée, mais je sèche bêtement.
Merci
Je veux créer un tag cloud maison, parce que je ne trouve pas ce que je veux sur le Web.
Voici mon idée. Bcp de webmaster vu les sources trouvées accumulent dans une BDD à 2 champs les requêtes des recherches (clé primaire + tag), ce qui peut faire des miliers d'enregistrement dans la BDD.
Ensuite il faut créer un index et regrouper les mots similaires par un GROUP BY
J'essaie de faire autrement.
Voici ma table :
id_tag //clé primaire
tag //les mots clé ou expressions clé UNIQUES selon si recherche "tous les mots", "un mot" ou "expression exacte"
popularite //nombre d'occurences des recherches pour chaque mot ou expression uniques
Je sais pas si c'est clair. Plutôt que d'enregistrer 10 fois le même mot, je l'enregistre 1 seule fois avec une popularité de 10.
Ça évite de charger la BDD, c'est une gestion des enregistrements faite en amont en PHP.
Bon déjà je suis ouvert aux avis sur la méthode, au départ, plutôt que sur une autre.
Voilà maintenant mon pb. Je n'arrive pas à faire une requête SQL qui me permette de sélectionner les X tags les plus populaires, avec un affichage aléatoire de ces tags.
J'ai aussi besoin de recupérer le cumul de popularité (somme des champs popularité) pour les occurences sélectionnées par la requête.
Ainsi avec une règle de trois, je pourrais déterminé un ratio, qui va déterminer la taille et la couleur d'affichage du tag dans le nuage.
J'espère être clair. Cette requête est surement pas très compliquée, mais je sèche bêtement.
Merci
Dernière édition par Mountain Magazin le Ven Mar 28, 2008 22:34, édité 2 fois.
Quelque chose comme ça?
(jamais testé une chose pareille)
(jamais testé une chose pareille)
- Code: Tout sélectionner
SELECT * FROM
( SELECT *
FROM taTable
ORDER BY popularite
LIMIT 0,X)
ORDER BY RAND()
-

Mountain Magazin - WRInaute impliqué

- Messages: 447
- Inscription: Ven Oct 01, 2004 10:27
Salut, merci.
Non à priori ce n'est pas ça, j'ai plein d'erreurs SQL, et en bidouillant, je ne trouve pas la bone soluce.
Je continue à chercher, et coups de main bienvenue. J'aimerais aussi savoir ce que vous pensez de cette méthode de stockage dans la BDD plutôt que ce qu'on trouve en général
Non à priori ce n'est pas ça, j'ai plein d'erreurs SQL, et en bidouillant, je ne trouve pas la bone soluce.
Je continue à chercher, et coups de main bienvenue. J'aimerais aussi savoir ce que vous pensez de cette méthode de stockage dans la BDD plutôt que ce qu'on trouve en général
Bonsoir
As-tu essayé un truc du style
J'ai pu la syntaxe en tête, mais en clair tu génères pour chaque enregistrement un nombre aléatoire dans un champs bidon, puis tu ordonnes ta table avec ce champs
Autre soluce plus "arrache" :
1°) Requête des x tags les plus populaires, que tu claques dans un tableau
2°) Mélange du tableau avant affichage (algorithme simplissime avec 1 boucle sur le nombre d'éléments et une inversion de deux éléments pris au hasard : pas besoin d'être "carré" algorithmiquement parlant avec ce genre de besoin
)
As-tu essayé un truc du style
- Code: Tout sélectionner
SELECT champs1, champs2, ..., RAND() AS ChampsOrdre
FROM Table
ORDER BY ChampsOrdre ASC
LIMIT 0,x
J'ai pu la syntaxe en tête, mais en clair tu génères pour chaque enregistrement un nombre aléatoire dans un champs bidon, puis tu ordonnes ta table avec ce champs
Autre soluce plus "arrache" :
1°) Requête des x tags les plus populaires, que tu claques dans un tableau
2°) Mélange du tableau avant affichage (algorithme simplissime avec 1 boucle sur le nombre d'éléments et une inversion de deux éléments pris au hasard : pas besoin d'être "carré" algorithmiquement parlant avec ce genre de besoin
-

Mountain Magazin - WRInaute impliqué

- Messages: 447
- Inscription: Ven Oct 01, 2004 10:27
Salut,
Je ne trouve aucune référence par rapport à cette syntaxe, je vois pas comment faire.
J'aimerais le faire en SQL, pas en php, mais je ne sais pas si c'est possible.
Je suis dessus depuis plusieurs heures, ça me gonfle.
Merci de votre aide.
Je ne trouve aucune référence par rapport à cette syntaxe, je vois pas comment faire.
J'aimerais le faire en SQL, pas en php, mais je ne sais pas si c'est possible.
Je suis dessus depuis plusieurs heures, ça me gonfle.
Merci de votre aide.
-

Mountain Magazin - WRInaute impliqué

- Messages: 447
- Inscription: Ven Oct 01, 2004 10:27
Oui, test, si TRUE update, si false, INSERT
En plus, comme il y a explode des mots clefs, on boucle sur le nombre de mots clefs une fois virés les mots de 2 lettres et moins
Ça fait plus de requêtes oui, mais elles sont simplicimes sur une base assez limitée par cette méthode.
En fait tu choisi entre te couper un bras ou te couper une main. Je pense que c'est mieux que d'avoir des miliers de fois le même mot enregistré dans une BDD, avec un index.
Sinon, à la longue, ce serait beaucoup plus lourd, et les requêtes d'affichage du nuage sont lancées à chaque impression de page, souvent depuis la home, alors qu'avec ma méthode, tout le monde ne passe pas par la recherche par mot clé.
Ma requête de base serait :
Affichage aléatoire sans soucis. Par contre, il me manque deux choses que je n'arrive pas à trouver :
- Récupérer seulement les X tags les plus populaires (je ne vais pas afficher les tags qui ont été joués une seule fois il y a des mois)
- Calculer la somme des popularités pour les tags retenus par la requête. En l'état, ça ne fonctionne pas.
Merci
En plus, comme il y a explode des mots clefs, on boucle sur le nombre de mots clefs une fois virés les mots de 2 lettres et moins
Ça fait plus de requêtes oui, mais elles sont simplicimes sur une base assez limitée par cette méthode.
En fait tu choisi entre te couper un bras ou te couper une main. Je pense que c'est mieux que d'avoir des miliers de fois le même mot enregistré dans une BDD, avec un index.
Sinon, à la longue, ce serait beaucoup plus lourd, et les requêtes d'affichage du nuage sont lancées à chaque impression de page, souvent depuis la home, alors qu'avec ma méthode, tout le monde ne passe pas par la recherche par mot clé.
Ma requête de base serait :
- Code: Tout sélectionner
$tagresult = mysql_query("SELECT tag, popularite, SUM(popularite) AS total FROM tag_cloud GROUP BY id_tag ORDER BY RAND() LIMIT $LIM ") or die(mysql_error());
Affichage aléatoire sans soucis. Par contre, il me manque deux choses que je n'arrive pas à trouver :
- Récupérer seulement les X tags les plus populaires (je ne vais pas afficher les tags qui ont été joués une seule fois il y a des mois)
- Calculer la somme des popularités pour les tags retenus par la requête. En l'état, ça ne fonctionne pas.
Merci
ou même sans algo, avec la fonction shuffle()cedric_g a écrit:Mélange du tableau avant affichage (algorithme simplissime avec 1 boucle sur le nombre d'éléments et une inversion de deux éléments pris au hasard : pas besoin d'être "carré" algorithmiquement parlant avec ce genre de besoin)
-

Mountain Magazin - WRInaute impliqué

- Messages: 447
- Inscription: Ven Oct 01, 2004 10:27
Bon, pas trouvé en SQL.
Par contre, j'y suis arrivé avec shuffle(), un grand merci donc !
Voici la solution :
Voilà il reste à régler la mise en forme des tags, avec dimensionnement des polices et choix des couleurs.
Merci de votre aide, j'espère que ce bout de code pourra éviter une perte de temps importante pour ceux qui veulent créer un nuage de mots.
Si vous avez des remarques.
A+
Par contre, j'y suis arrivé avec shuffle(), un grand merci donc !
Voici la solution :
- Code: Tout sélectionner
$LIM = "35";
$tagresult = mysql_query("SELECT tag, popularite FROM tag_cloud WHERE lang = '$lang' ORDER BY popularite DESC LIMIT $LIM ") or die(mysql_error());
function rand_hexcolor() //Défini une couleur hexadécimal de manière aléatoire (fonction pas moi)
{
$color = dechex(mt_rand(0,16777215));
$color = str_pad($color,6,'0');
return $color;
}
$MIN_SIZE = "9";
$MAX_SIZE = "36";
print("<div class=\"tag\"><img src=\"$DOMAINE/images/graphisme/$lang/tag_cloud.gif\" alt=\"Nuage de mots clefs Tag cloud\"><br>");
$num = 0;
while ($tag = mysql_fetch_array($tagresult)) {
$mot[$num] = $tag['tag'];
$popularite[$num] = $tag['popularite'];
$mix[$num] = array(mot => $mot[$num], pop => $popularite[$num]);
$total += $popularite[$num];
$num++;
}
shuffle($mix);
foreach ($mix as $motcle) {
$motclemot = $motcle[mot];
$motclepop = $motcle[pop];
$size = $motclepop/$total*300;
$size = round($size, 0);
if ( $size < $MIN_SIZE ) { $size = $MIN_SIZE; }
if ( $size > $MAX_SIZE ) { $size = $MAX_SIZE; }
$colo = rand_hexcolor();
$mot_cherche = eregi_replace(" ", "+", $motclemot);
echo "<a href=\"$DOMAINE/rechercher,camping-en-france.php?lang=$lang&search=".$mot_cherche."&mode=expression_exacte&Submit=Chercher&position=0\" style=\"font-size: ".$size."px; color: #".strtoupper($colo).";\" title=\"tag\">$motclemot</a> ";
}
print("</div>");
Voilà il reste à régler la mise en forme des tags, avec dimensionnement des polices et choix des couleurs.
Merci de votre aide, j'espère que ce bout de code pourra éviter une perte de temps importante pour ceux qui veulent créer un nuage de mots.
Si vous avez des remarques.
A+
Dernière édition par Mountain Magazin le Sam Mar 29, 2008 21:34, édité 1 fois.
-

Mountain Magazin - WRInaute impliqué

- Messages: 447
- Inscription: Ven Oct 01, 2004 10:27
C'est terminé, pour ceux qui veulent voir le résultat sur la home de mon www.
Regardez dans les 2 langues, FR et EN. J'ai du ajouter dans la BDD un champ lang pour permettre cela.
Si quelqu'un veut des explications pour faire la même chose, avec cette méthode.
Merci de votre aide encore.
A+
Regardez dans les 2 langues, FR et EN. J'ai du ajouter dans la BDD un champ lang pour permettre cela.
Si quelqu'un veut des explications pour faire la même chose, avec cette méthode.
Merci de votre aide encore.
A+
10 messages • Page 1 sur 1
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Livre La Méthode Google, de Jeff Jarvis - Que ferait Google à votre place ?
- Yahoo Audio Search
- Méthode LSI (Latent Semantic Indexing) et référencement
- Mort du META tag "keywords"
- X-Robots-Tag : directive pour bloquer les robots dans l'entête HTTP : explications
- Balises meta et référencement : les bases à savoir
- Firefox et son projet de mesure de trafic des sites web
- Les informations de la Google Toolbar
- Prise en compte de la mise en page HTML par les moteurs de recherche
- La mesure d'audience axée référencement
Consultez la description détaillée des produits ou services de Google suivants : Google Images
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités




le forum