Requete sql count

Fermé
PCRef - 25 juin 2007 à 16:15
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 27 juin 2007 à 17:16
Bonjour à tous,

J'ai une table mysql nommée "recherches" qui contient simplement mot recherchés par les internautes dans un formulaire de recherche. Chaque fois qu'un internaute tape un mot, ce mot vient ajouter une ligne dans la table (une colonne id_recherche auto increment et une colonne mot).

Je souhaite pouvoir afficher simplement en php la liste des 50 mots les plus recherchés, et le nombre de fois qu'ils l'ont été.

J'ai essayé SELECT COUNT mais rien a faire, pas moyen d'obtenir et de traiter en php les deux en meme temps.

Je galere complet et je n'arrive pas a afficher les deux. Savez vous comment faire ? Merci d'avance.

8 réponses

mister-ti Messages postés 3 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 25 juin 2007 62
25 juin 2007 à 16:54
Tu as essayé la fonction LIMIT ?

Il me semble par exemple que LIMIT 0,49 affiche les résultats à partir de la ligne 0 jusqu'à 49 (soit les 50 premières réponses).

Si tu couples LIMIT à la requete qui va bien (du genre select les_mots from la_table order by nb_de_fois_que_le_mot_a_été_ajouté), ça devrait aller...
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
25 juin 2007 à 17:53
salut,

ouais le "LIMIT 50" en fin de requête ça te renverra que les 50 premiers. le problème c'est pour connaitre les occurrences les plus nombreuses. il doit bien y avoir moyen de le faire en une requête ou deux.
mais je serais toi je changerai la table.

tu fais un champ unique 'mot' qui te servira de clé (comme ça tu es sûr de ne pas rentrer deux fois le même mot. et un champ 'nombre'. à chaque fois qu'un utilisateur tape un mot, si le mot n'existe pas tu crées l'enregistrement avec 'nombre' = 1. si le mot est déjà présent tu incrémentes 'nombre'.

pour retrouver les plus utilisés un simple 'SELECT' avec 'ORDER BY nombre LIMIT 50' et le tour est joué.
0
select mot, count(mot) as nbrDeFois 
from tatable
group by mot
limit 0, 49;


sa devrait le faire
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
25 juin 2007 à 18:05
a ben voila !
je pensais pas à qu'on pouvait Count() autrement que par 'SELECT COUNT' tout seul !
et tu mets un 'ORDER BY' sur le 'nbrDeFois' je suppose.

heureusement y en a encore qui réfléchissent, bravo !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
a oui mince, le group by sur nbrDeFois,
bien vu dalida
0
Merci à tous pour vos réponses, je teste et je vous tiens au courant, mais franchement MERCI !
0
Autre question, car je suis aussi limité en php...

Une fois la query faire, pouvez vous me dire en deux mots comment je peut récupérer mot et nrdDeFois ? Avec un mysql_fetch_row ?

Merci d'avance
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 920
27 juin 2007 à 17:16
ouaip !

moi je le fais avec ça
$result = mysql_query($sql_query, $link);
if($result){
	$row = mysql_fetch_assoc($result);
	$mot = $row['mot'];
	$nrdDeFois = $row['nrdDeFois '];
}

je sais pas quel est le mieux.
0