Comment créer un nuage de tags php/mysql

123 posts in this topic

Posted · Report post

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.

Share this post


: post
Share on other sites

Posted · Report post

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....

Share this post


: post
Share on other sites

Posted · Report post

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

Willy

Share this post


: post
Share on other sites

Posted · Report post

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

Share this post


: post
Share on other sites

Posted · Report post

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

Share this post


: post
Share on other sites

Posted · Report post

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]

Share this post


: post
Share on other sites

Posted · Report post

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

Share this post


: post
Share on other sites

Posted · Report post

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+

Share this post


: post
Share on other sites

Posted · Report post

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 ?

Share this post


: post
Share on other sites

Posted · Report post

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

Share this post


: post
Share on other sites

Posted · Report post

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.

Share this post


: post
Share on other sites

Posted · Report post

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;

Share this post


: post
Share on other sites

Posted · Report post

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?

Share this post


: post
Share on other sites

Posted · Report post

ON PEUT REPONDRE A MA QUESTION

Share this post


: post
Share on other sites

Posted · Report post

ca te donne quoi comme erreur?

Share this post


: post
Share on other sites

Posted · Report post

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!

Share this post


: post
Share on other sites

Posted · Report post

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.

Share this post


: post
Share on other sites

Posted · Report post

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

Share this post


: post
Share on other sites

Posted · Report post

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

Share this post


: post
Share on other sites

Posted · Report post

ligne 50 c'est bien la requete?

Share this post


: post
Share on other sites

Posted · Report post

non juste à des mots recherchés.

Share this post


: post
Share on other sites

Posted · Report post

arf, ok alors J'AI RIEN DIT

merci Atila

Share this post


: post
Share on other sites

Posted · Report post

ligne 50 c'est bien la requete?

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

Share this post


: post
Share on other sites

Posted · Report post

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]

Share this post


: post
Share on other sites

Posted · Report post

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

Share this post


: post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

Twitter Advisto ecommerce

Facebook PEEL Shopping