Comment créer un nuage de tags php/mysql

123 messages dans ce sujet

Posté(e) · Signaler ce message

je ne suis pas certain que tu ai besoin de les effacer (les mauvaises requetes) sachant qu'il ne te reste qu'à choisir les 30 ou 40 plus grosses demandes.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

je ne suis pas certain que tu ai besoin de les effacer (les mauvaises requetes) sachant qu'il ne te reste qu'à choisir les 30 ou 40 plus grosses demandes.

Oui pas béte je vais faire ça avec la requete sql.

Faut que je place un filtre aussi, car j'ai droit au petitebite etc....

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Tu peux faire un filtre + un LIMIT 30 ou 40 dans ta requete SQL.

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Tu peux faire un filtre + un LIMIT 30 ou 40 dans ta requete SQL.

Willy

Je bloque je ne sais pas faire, tu peux filer un tuyau :)

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bon petit etat des lieux :

http://www.3dvf.fr/tag.php

On a là un bon exemple de la problématique avec ce script trop ouvert :

Certain mots sont des erreurs d'orthographe

(ex :

# Expos

# Exposé <-- Celui la c'est le bon produit

# Exposeec

# Exposeeec

# Exposeeeec

)

Les insultes (ex: bite, petitebite etc...)

Il faut aussi limité le nombre de résultat affiché, tout en gardant l'effet nuage de tag, c'est a dire qu'il represente tous les niveaux de recherche.

Et la j'ai besoin d'aide :)

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

pour ce qui est de la limite, il te suffit de dire LIMIT 40 par exemple et il ne va te donner que les 40 premiers résultats.

Pour ce faire tu dois faire une requete qui va te donner les 40 plus grosses recherches.

$query = "
SELECT tag_name AS tag, nbsearch AS quantity
FROM tag_cloud
WHERE tag_name IN (SELECT tag_name FROM tag_cloud GROUP BY tag_name ORDER BY nbsearch DESC LIMIT 40)// requete imbriquée
GROUP BY tag_name ORDER BY tag_name ASC";
[/codebox]

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Et si tu mets:

$query = "SELECT tag_name AS tag, nbsearch AS quantity FROM tag_cloud GROUP BY tag_name ORDER BY RAND() LIMIT 40";

???

Tu sélectiones 40 lignes aléatoirement.

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

La solution de willy fonctionne, par contre celle du dessus non.

Donc reste maintenant a supprimé certain mots qui n'ont rien a faire dans le nuage :)

Premier jet :

Traitemant de la chaine
$interdit='enfoiré|connard|merde|salaud|bite|sexe|sex|penis';
$autre='*****';
$key1 = preg_replace('`\b('.$interdit.')[sx]?\b`si',$autre, $key);
// '####' par le lien de destination voulu.
if($key1 != '*****'){
echo '<li><a href="http://www.3dvf.fr/achat/recherche.php?motclef='.$key.'" ';
echo ' title="'.$value.' recherche(s) sur le mot '.$key.'"';
echo '>'.$key.'</a></li> ';
}
[/codebox]

Ca fonctionne je supprime bite, mais pas petitebite!!!

A+

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

le truc c'est que plus le mot est demandé plus il est écrit en gros ?

et cela d'après la recherche effectuée sur ton site sur la page recherche.php ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Le soucis vient du \b, non ?

<?php

/* \b, dans le masque, indique une limite de mot, de façon à ce que le mot

 "web" uniquement soit repéré, et pas seulement des parties de mots comme

  dans "webbing" ou "cobweb" */

if (preg_match("/\bweb\b/i", "PHP est le meilleur langage de script du web.")) {

	 echo 'Un mot a été trouvé.';

} else {

	 echo 'Un mot n\'a pas été trouvé.';

}


if (preg_match("/\bweb\b/i", "PHP est le meilleur langage de script pour les webagency.")) {

	 echo 'Un mot a été trouvé.';

} else {

	 echo 'Un mot n\'a pas été trouvé.';

}

?>

Source phhp.net

Willy

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Et si tu mets:

$query = "SELECT tag_name AS tag, nbsearch AS quantity FROM tag_cloud GROUP BY tag_name ORDER BY RAND() LIMIT 40";

???

Tu sélectiones 40 lignes aléatoirement.

Willy

ton code est pas mal willy, je ne connaissais pas order by RAND()

Mais s'il fonctionne, il ne donne pas le resultat escompté ! en effet il ne prend pas les 40 plus grosses recherches...

Je vais trouver la bonne orthographe pour ma requete 3dvf.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

voilà, essaye ca

SELECT tag_name AS tag, nbsearch AS quantity

FROM tag_cloud

WHERE tag_name =(SELECT tag_name FROM tag_cloud GROUP BY tag_name ORDER BY nbsearch DESC LIMIT 40)

GROUP BY tag_name ORDER BY tag_name ASC;

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

voilà, essaye ca

SELECT tag_name AS tag, nbsearch AS quantity

FROM tag_cloud

WHERE tag_name =(SELECT tag_name FROM tag_cloud GROUP BY tag_name ORDER BY nbsearch DESC LIMIT 40)

GROUP BY tag_name ORDER BY tag_name ASC;

PAs bon :)

Willy il faut que je supprime le /b?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

ON PEUT REPONDRE A MA QUESTION

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

ca te donne quoi comme erreur?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

le truc c'est que plus le mot est demandé plus il est écrit en gros ?

et cela d'après la recherche effectuée sur ton site sur la page recherche.php ?

Oui c'est bien ca !

au fait tu as recu un mail paulanna!

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

ON PEUT REPONDRE A MA QUESTION

Oui tous les mots qui sont saisie dans le formulaire sont entré dans la base et ou incrémenté, ensuite je l'ai affiche sous forme de nuage.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

ca te donne quoi comme erreur?

Bonne question je vais faire affiché les erreurs ^^

Warning: mysql_query(): Unable to save result set in /home/sitefr/cgshop-v2/tag.php on line 44

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/sitefr/cgshop-v2/tag.php on line 50

Notice: Undefined variable: tags in /home/sitefr/cgshop-v2/tag.php on line 60

Warning: array_values(): The argument should be an array in /home/sitefr/cgshop-v2/tag.php on line 60

Warning: Wrong parameter count for max() in /home/sitefr/cgshop-v2/tag.php on line 60

Notice: Undefined variable: tags in /home/sitefr/cgshop-v2/tag.php on line 61

Warning: array_values(): The argument should be an array in /home/sitefr/cgshop-v2/tag.php on line 61

Warning: Wrong parameter count for min() in /home/sitefr/cgshop-v2/tag.php on line 61

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

et les mots saisis dans le formulaires correspondent à des catégories, à des produits ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

ligne 50 c'est bien la requete?

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

non juste à des mots recherchés.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

arf, ok alors J'AI RIEN DIT

merci Atila

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

ligne 50 c'est bien la requete?

while ($row = mysql_fetch_array($result)) {

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

en fait 3dvf

Si tu veux que le resultat corresponde bien, garde ma requete de coté, elle est bonne niveau sql mais pas niveau MySQL qui n'accepte pas les requetes imbriquées.

Pour que ca marche execute ces requtes

mysql_query("CREATE TEMPORARY TABLE tmptable ( tag_name varchar(100));");
mysql_query("INSERT INTO tmptable SELECT tag_name FROM tag_cloud GROUP BY tag_name ORDER BY nbsearch DESC LIMIT 40;");


$query = "SELECT T.tag_name AS tag, T.nbsearch AS quantity
FROM tag_cloud AS T , tmptable AS TMP
WHERE T.tag_name = TMP.tag_name
GROUP BY T.tag_name ORDER BY T.tag_name ASC;";
$result = mysql_query($query);

mysql_query("DROP TABLE tmptable");
[/codebox]

Par contre c'est le résultat de celle du milieu que tu dois prendre et les autres ce n'est que du sql à utiliser ...

[b]Qu'en penses tu Willy?[/b]

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

alors quel est l'avantage de ce script ?

je pensais qu'il s'agisait d'effectuer une recherche sur le nom des produits par exemple, et que le nom le plus demandé serait de plus en plus gros; quel interet de faire une recherche juste sur des mot clés sans "valeurs" ?

comprend pas encore

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping