PHP, top des recherches : Savez-vous ?

Nouveau WRInaute
Bonjour à tous,

J'aimerais faire un top des recherches sur mon site.

Le problème, c'est que je ne sais pas comment m'y prendre.

Je peux ajouter une table "search_words" et y mettre tous les mots recherchés.

Mais comment procèder ensuite ?

Savez-vous s'il existe une requête qui extrait les mots les plus utilisés dans le champ de la table ?
 
WRInaute accro
moi je suis Old School alors je ferai ça à la main. Parce que sinon tu va vite te retrouver avec des trucs de cul ou des spams en tête des recherches... :S
 
WRInaute occasionnel
babou a dit:
Je peux ajouter une table "search_words" et y mettre tous les mots recherchés.

Mais comment procèder ensuite ?

Savez-vous s'il existe une requête qui extrait les mots les plus utilisés dans le champ de la table ?

Connais tu SQL? Si oui ca ne devrait pas poser de problemes. Sinon documentes toi la dessus ca s'apprends tres vite et c'est tres interessant.
 
WRInaute impliqué
Code:
SELECT recherche, COUNT(recherche) AS nb FROM `search_words` GROUP BY recherche ORDER BY nb DESC

si tu connais si bien mysql, ça devrait pas te poser problème...
 
WRInaute occasionnel
Une petite proposition du comment procéder, il y en a plein d'autres.

Tu peux ajouter une table search_words qui contiendra tes words et tes hits.
A chaque nouvelle recherche sur ton site, tu incrémentes la valeurs de hits du mot associé, s'il existe dans la table, sinon tu l'insère avec la valeur hits à 1.

Ensuite, supposons que tu veuilles connaître le top 10 de tes mots les plus recherchés, tu peux utiliser la requête suivante :

Code:
SELECT *
FROM `search_words`
ORDER BY `hits` DESC
LIMIT 0 , 10

Edit : Oups, j'ai été précédé ;)
Edit 2: Requette corigée, cf ci dessous.
 
WRInaute impliqué
ce n'est pas la même technique.

moi ça n'impose que de faire un INSERT à chaque recherche.

Mais par contre tu te retrouves vite avec une table avec 50000 entrées.

par contre pour ta requête ce serait pas plutôt :

Code:
SELECT *
FROM `search_words`
ORDER BY `hits` DESC
LIMIT 0 , 10

;)
 
WRInaute occasionnel
Oui tu as raison pour la requête ... quoi qu'avoir les stats des dix mots les moins recherchés ça pourrait être marant aussi 8)
Merci pour la correction !
 
Nouveau WRInaute
yeca a dit:
ce n'est pas la même technique.

moi ça n'impose que de faire un INSERT à chaque recherche.

Mais par contre tu te retrouves vite avec une table avec 50000 entrées.

Oui c'est pour ça que l'autre solution est plus adaptée.
 
WRInaute impliqué
Ce que demande Babou, c'est peut-être, comment récupérer les mot-clés depuis le referrer???
Dans ce cas, il faudrait traiter cas par cas les différents sites que tu qualifierais de "moteur", et récupérer la chaine qui se trouve après le query? / q? / requete? <- là c'est aussi à faire au cas par cas, selon le moteur...

sinon, tu as des logiciels de stats qui le font.
 
WRInaute impliqué
Nikos38 a dit:
yeca a dit:
ce n'est pas la même technique.

moi ça n'impose que de faire un INSERT à chaque recherche.

Mais par contre tu te retrouves vite avec une table avec 50000 entrées.

Oui c'est pour ça que l'autre solution est plus adaptée.

bah non, parce que ça te force aussi à récupérer la valeur de chaque mot clé à chaque fois.

et avec cette méthode, tu ne peux pas insérer aussi l'IP pour vérification d'un flood, ou la date et l'heure si jamais tu veux suivre dans le temps ;)
 
WRInaute accro
Il parrait qu'on peut trier par nombre d'apparition d'occurences avec Excel mais j'ai pas compris comment il fallait faire
si quelqu'un sait...
ça peut être utile plutôt que de soliciter la BdD
 
Nouveau WRInaute
Merci beaucoup pour vos réponses, c'est exactement cela que je voulais faire.

Code:
SELECT recherche, COUNT(recherche) AS nb FROM `search_words` GROUP BY recherche ORDER BY nb DESC

Si j'ai bien compris :

- Tu selectionnes toutes les lignes du champ "recherche", tu les comptes (ça devient "nb").
- Ensuite tu fais un GROUP BY sur le champ "recherche". Quel effet ça a ?
- Puis tu tris par "nb", ça je comprends.
 
WRInaute occasionnel
Tu fais group by pour compter combien de fois un meme mot revient.
En fait tu devrais plutot ajouter une colonne que tu incrementes à chaque fois qu'un mot est demandé
 
Nouveau WRInaute
yeca a dit:
Nikos38 a dit:
yeca a dit:
ce n'est pas la même technique.

moi ça n'impose que de faire un INSERT à chaque recherche.

Mais par contre tu te retrouves vite avec une table avec 50000 entrées.

Oui c'est pour ça que l'autre solution est plus adaptée.

bah non, parce que ça te force aussi à récupérer la valeur de chaque mot clé à chaque fois.

et avec cette méthode, tu ne peux pas insérer aussi l'IP pour vérification d'un flood, ou la date et l'heure si jamais tu veux suivre dans le temps ;)

C'est vrai.
Avec le méthode de "hits" je ne peux plus faire ça :( (ou alors avec une autre table...)
 
WRInaute passionné
TOMHTML a dit:
moi je suis Old School alors je ferai ça à la main. Parce que sinon tu va vite te retrouver avec des trucs de cul ou des spams en tête des recherches... :S

C'est clair !

Cependant il te suffit de bannir ce genre de mot-clé avant l'insertion dans la BDD.
 
WRInaute accro
oui mais bon c'est complexe et long (gros fichier en plus)...
(moi en fait j'utilise un fichier TXT dans lequel j'enregistre les requetes tapées.)
 
Discussions similaires
Haut