Page 1 sur 1

Compter le nombre d'enregistrement

Posté : 27 sept. 2005, 10:07
par FAbrice
Bonjour,

J'ai une question pour vous:
j'ai une base de données qui se décompose de la maniere suivante:
|ID|NumDossier|Commentaire|

Je cherche le moyen de compter le nombre de dossiers par type de commentaires.

Je ne sais pas si c'est bien clair :?

en tout cas, merci de votre réponse
FAb

Posté : 27 sept. 2005, 10:17
par Cyrano
Quel genre de contenu tu as dans le champ commentaire ? Si c'est du texte, ça va pas être évident, mais si c'est un mot simple issu d'une liste prédéfinie, alors un COUNT(*) assorti d'une clause GROUP BY `commentaire` devrait résoudre ton problème.

Posté : 27 sept. 2005, 10:41
par FAbrice
Salut Cyrano,

j'utilise la fonction COunt + groupby mais lorsque j'affiche ma page, il me repete tjs la ligne numéro 1 :shock:
Par contre, le nombre de lignes du tableau correspondant bien au nombre de commentaire différents!

En ce qui concerne le contenu de la colonne commentaire, il n'y a que de nombre qui font réfernce au texte qu'il y a dans une autre table.

Pour le moment, voici la requete que j'ai:

Code : Tout sélectionner

Select avisot.Commentaire, Count(registre.Avisot) From avisot, registre Group by registre.numdossier
la table registre est celle que g décrite dans mon 1er post et la table avisot, est la table qui me sert a afficher le texte des commentaires de la table registre.

FAb

Posté : 27 sept. 2005, 10:45
par Cyrano
Dans la clause GROUP BY, tu dois avoir les champs qui ne sont pas inclus dans la fonction d'agregat (COUNT)

Maintenant, je comprends moins: au départ, tu avais une seule table. Maintenant tu en as deux. mets-nous les structures des deux tables avec les types de champs et des commentaires de description si nécessaire pour qu'on puisse déterminer comment créer la requête appropriée.

Posté : 27 sept. 2005, 11:25
par FAbrice
Salut

je viens de trouver la reponse a ma requete! j'avais inversé les champs de group by et de count :oops:

par contre, je n'arrive pas a faire la somme des count obtenus :( . est ce que tu connaitrais un moyen d'afficher le monbre d'enregistrement dans une table? (car je cherche a faire un ratio avec le count obtenus)

merci de ton aide,
FAb

Posté : 27 sept. 2005, 11:52
par VaN
mysql_num_rows($query) peut etre

Posté : 27 sept. 2005, 13:15
par Cyrano
mysql_num_rows($query) peut etre
Non, parce que ça va retourner le nombre de ligne obtenues mais pas le total des lignes de toute la table:

Pour ça, il va falloir le faire par programmation sur la base du résultat. Par exemple, tu initialises un pointeur à zéro et à chaque tour de boucle, tu l'incrémentes de la valeur récupérée dans le count().
À la sortie de la boucle, tu auras la valeur totale dans le pointeur.

Posté : 27 sept. 2005, 14:03
par sadeq
Select avisot.Commentaire, Count(registre.Avisot)
From avisot, registre
Group by registre.numdossier
Cette requête est fausse car le lien entre les 2 tables utilisées est absent.
il faut ajouter un WHERE avoisot.Commentatire=registre.Commentaire si la clé primaire de registre est le champ "Commentaire"

On fait on n'a pas suffisament d'info sur la strucure relationnelle de tes tables. Mais je vais essayé de t'aider par l'exemple:

Soit les 2 tables :
Jeu (id, nom)
Scrore (date, points, joueur, id_jeu)

On comprend qu'il s'agit d'un jeu joué par des joueurs dans le temps
Chaque joueur réalise un score l'ors d'un jeu dans une date donnée

Requêtage:

Pour calculer le nombre de fois qu'un même jeu a été joué, on écrit:
R1:

Code : Tout sélectionner

SELECT nom, Count(id_jeu) AS nombre_de_fois_joué FROM Jeu, Score WHERE Jeu.id = Score.id_jeu GROUP BY nom
Pour calculer le pourcentage de fréquentation d'un jeu par rapport aux autres jeux, on a besoin en plus du résultat précédent de R1 de compter le nombre total de jeux enregistrés par les joueurs, ceci s'écrit:
R2

Code : Tout sélectionner

SELECT Count(id_jeu) as nombre_total_de_jeux FROM Score

Et maintenant, il suffit de diviser le résultat de R1 par celui de R2 pour obtenir le % de fréquentation d'un jeu, ceci s'écrit:
R3:

Code : Tout sélectionner

SELECT (nombre_de_fois_joué / nombre_total_de_jeux)*100 as fréquence FROM (SELECT nom, Count(id_jeu) AS nombre_de_fois_joué FROM Jeu, Score WHERE Jeu.id = Score.id_jeu GROUP BY nom) AS R1, (SELECT Count(id_jeu) as nombre_total_de_jeux FROM Score) AS R2
En fait on a réexploité la première requête R1 et la combiné avec la requête R2 dans le cadre d'une requête globale.

Attention : ce genre de requêtes imbriquées est supporté à partir de MYSQL 4.1 et +

Posté : 28 sept. 2005, 08:47
par FAbrice
MERCIIIIIIIIII ca marche parfaitement :lol:

Heureusement que vous etes la!! :wink:

merci encore,
FAb