| |
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
Mountain Magazin WRInaute occasionnel

Inscrit le: 01 Oct 2004 Messages: 128 Localisation: Grenoble
|
Posté 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 |
|
| |
|
 |
Bacteries WRInaute passionné

Inscrit le: 27 Mai 2004 Messages: 788 Localisation: France - Nantes
|
Posté 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()
|
|
|
| |
|
 |
Mountain Magazin WRInaute occasionnel

Inscrit le: 01 Oct 2004 Messages: 128 Localisation: Grenoble
|
Posté 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 |
|
| |
|
 |
cedric_g WRInaute accro

Inscrit le: 18 Jan 2006 Messages: 1318 Localisation: Aube
|
Posté 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
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 occasionnel

Inscrit le: 01 Oct 2004 Messages: 128 Localisation: Grenoble
|
Posté 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. |
|
| |
|
 |
Bacteries WRInaute passionné

Inscrit le: 27 Mai 2004 Messages: 788 Localisation: France - Nantes
|
Posté 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? |
|
| |
|
 |
Mountain Magazin WRInaute occasionnel

Inscrit le: 01 Oct 2004 Messages: 128 Localisation: Grenoble
|
Posté 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 |
|
| |
|
 |
Leonick WRInaute accro

Inscrit le: 08 Aoû 2004 Messages: 8051 Localisation: Val de Marne
|
Posté 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 ) |
ou même sans algo, avec la fonction shuffle() |
|
| |
|
 |
Mountain Magazin WRInaute occasionnel

Inscrit le: 01 Oct 2004 Messages: 128 Localisation: Grenoble
|
Posté 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 WRInaute occasionnel

Inscrit le: 01 Oct 2004 Messages: 128 Localisation: Grenoble
|
Posté 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+ |
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
|
|