Formation par Olivier Duffez

Formation au référencement par Olivier Duffez, créateur de WebRankInfo !
Une formule efficace alliant théorie et pratique, avec une haute disponibilité des intervenants
Cette formule a déjà convaincu plusieurs centaines d'entreprises, pourquoi pas vous ?
Réservez vite votre place en ligne (convention possible pour imputer sur le budget formation)

Formation référencement Marseille

[RESOLU] Tag cloud => Méthode originale

Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
Mountain Magazin
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 01 Oct 2004
Messages: 128
Localisation: Grenoble

URL permanente de ce messagePosté le : Ven Mar 28, 2008 15:54    Sujet du message: [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


Dernière édition par Mountain Magazin le Ven Mar 28, 2008 23:34; édité 2 fois
 
Mountain Magazin Visiter le site web du posteur
Bacteries
WRInaute passionné
WRInaute passionné

Inscrit le: 27 Mai 2004
Messages: 788
Localisation: France - Nantes

URL permanente de ce messagePosté le : Ven Mar 28, 2008 16:28    Sujet du message: [RESOLU] Tag cloud => Méthode originale

Quelque chose comme ça?
(jamais testé une chose pareille)
Code:

SELECT * FROM
( SELECT *
FROM taTable
ORDER BY popularite
LIMIT 0,X)
ORDER BY RAND()
 
Bacteries Visiter le site web du posteur
Mountain Magazin
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 01 Oct 2004
Messages: 128
Localisation: Grenoble

URL permanente de ce messagePosté le : Ven Mar 28, 2008 16:36    Sujet du message: [RESOLU] Tag cloud => Méthode originale

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
 
Mountain Magazin Visiter le site web du posteur
cedric_g
WRInaute accro
WRInaute accro

Inscrit le: 18 Jan 2006
Messages: 1318
Localisation: Aube

URL permanente de ce messagePosté le : Ven Mar 28, 2008 17:53    Sujet du message: [RESOLU] Tag cloud => Méthode originale

Bonsoir

As-tu essayé un truc du style

Code:
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 Wink

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 Twisted Evil )
 
cedric_g Visiter le site web du posteur
Mountain Magazin
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 01 Oct 2004
Messages: 128
Localisation: Grenoble

URL permanente de ce messagePosté le : Ven Mar 28, 2008 18:07    Sujet du message: [RESOLU] Tag cloud => Méthode originale

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.
 
Mountain Magazin Visiter le site web du posteur
Bacteries
WRInaute passionné
WRInaute passionné

Inscrit le: 27 Mai 2004
Messages: 788
Localisation: France - Nantes

URL permanente de ce messagePosté le : Ven Mar 28, 2008 18:11    Sujet du message: [RESOLU] Tag cloud => Méthode originale

En PHP ça se fait très facilement c'est vrai.

Sinon ta solution est pas mal, mais va demander plus de requêtes pour l'ajout (un test pour voir si ça existe déjà, si oui une update, sinon insert) non?
 
Bacteries Visiter le site web du posteur
Mountain Magazin
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 01 Oct 2004
Messages: 128
Localisation: Grenoble

URL permanente de ce messagePosté le : Ven Mar 28, 2008 18:19    Sujet du message: [RESOLU] Tag cloud => Méthode originale

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 :
Code:
$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
 
Mountain Magazin Visiter le site web du posteur
Leonick
WRInaute accro
WRInaute accro

Inscrit le: 08 Aoû 2004
Messages: 8051
Localisation: Val de Marne

URL permanente de ce messagePosté le : Ven Mar 28, 2008 22:20    Sujet du message: [RESOLU] Tag cloud => Méthode originale

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 Twisted Evil )
ou même sans algo, avec la fonction shuffle()
 
Leonick Visiter le site web du posteur
Mountain Magazin
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 01 Oct 2004
Messages: 128
Localisation: Grenoble

URL permanente de ce messagePosté le : Ven Mar 28, 2008 23:33    Sujet du message: [RESOLU] Tag cloud => Méthode originale

Bon, pas trouvé en SQL.

Par contre, j'y suis arrivé avec shuffle(), un grand merci donc !

Voici la solution :

Code:

$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 22:34; édité 1 fois
 
Mountain Magazin Visiter le site web du posteur
Mountain Magazin
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 01 Oct 2004
Messages: 128
Localisation: Grenoble

URL permanente de ce messagePosté le : Sam Mar 29, 2008 22:31    Sujet du message: [RESOLU] Tag cloud => Méthode originale

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+
 
Mountain Magazin Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort