> Tous les forums > Forum des Webmasters
 PHP/MySQL: count () plusieurs champs
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
tonguim
  Posté le 15/06/2006 @ 22:00 
Aller en bas de la page 
Petit astucien
Bonjour, j'ai une table qui comporte plusieurs champs (id, utilisateurs, grpUtilisateurs etc.), avec grpUtilisateurs: groupes d'utilisateurs, utilisateurs: login Je sélectionne le groupe d'utilisateur dans une zone de selection (sur un formulaire) et à l'aide d'une requête (je programme en php) je voudrais compter d'une part le nombre de groupes d'utilisateurs, le nombre d'utilisateurs par groupe. J'ai ceci comme requête:
select count(utilisateurs), count(grpUtilisateurs) from users where grpUtilisateurs="$var" group by grpUtilisateurs
Ma requête ne fonctionne pas elle m'affiche seulement la valeur du dernier count, c'est a dire count(grpUtilisateurs). Quelqu'un peut il m'aider à rectifier ma requête? Merci.
Publicité
The Retriever
 Posté le 16/06/2006 à 03:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

ne peux tu pas faire 2 requetes? c 'est tellement plus simple sinon, as tu essayé en renommant, les count... [code]select count(utilisateurs) as uti, count(grpUtilisateurs) as grp where... [/code]
papyboingtown
 Posté le 16/06/2006 à 03:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Il me semble que tu t'enflames un peu et que tu ne peux pas faire ça en une seule requête Oui, alors il me semble que tu peux essayer un trucs comme ça pour compter les utilisateurs par groupe : [code]select grpUtilisateurs, count (utilisateurs) from users group by grpUtilisateurs;[/code] ça va te donner sous forme d'un tableau, le nom du groupe et le nombre d'utilisateurs y appartenant. Pour avoir la répartition de tes utilisateurs sans renseigner le groupe : [code]select count (utilisateurs) from users group by grpUtilisateurs;[/code] Là t'aura plus qu'un tableau avec une colonne. Et pis pour compter le nombre de groupe [code]select (distinct grpUtilisateurs) from users; Si t'utilise pas le "distinct", il te donne le nombre d'enregistrement ou le champ "grpUtilisateur" n'est pas NULL. En tout cas si j'ai bien vu ou tu veux en venir, c'est pas possible ta requête Vive le sql [fete] A la vôtre [bierre] (oups ! j'ai un peu trainé, j'avais pas vu ta réponse retriever[choc])

Modifié par papyboingtown le 16/06/2006 03:56
ti_ouf
 Posté le 16/06/2006 à 08:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

il faut déjà connaitre les relations qu'ont tes champs. J'imagine que ton champ utilisateurs differe à chaque enregistrement ... Mais grpUtilisateurs est il différent à chaque enregistrement, ou est ce qu'il existe par défaut 1 nombre de groupe d'utilisateur ? Il y a des redondances ?

Modifié par ti_ouf le 16/06/2006 08:21
tonguim
 Posté le 16/06/2006 à 09:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
ti_ouf a écrit :
Mais grpUtilisateurs est il différent à chaque enregistrement, ou est ce qu'il existe par défaut 1 nombre de groupe d'utilisateur ? Il y a des redondances ?
Chaque utilisateur est unique; mais grpUtilisateurs n'est pas forcéménent différent à chaque enregistrement. Plusieurs utilisateurs peuvent être dans le même groupe.
ti_ouf
 Posté le 16/06/2006 à 18:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Mais tu ne connais pas pas le nombre exact de groupe ? tu ne fixes pas tes règles ?
koala01
 Posté le 17/06/2006 à 16:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Salut, Ce genre de requete n'a aucune chance de donner des résultats cohérent… En effet, la condition WHERE sert à sélectionner les enregistrement de la table qui remplissent la condition, et seuls ceux-ci sont sélectionné avant d'etre comptés… Ici, tu n'auras de toutes manière qu'un seul groupe sélectionné, simplement parce que tu utilise l'opérateur de comparaison =, alors que si tu souhaites sélectionner plusieurs groupes d'utilisateurs, tu dois utiliser l'opérateur in (liste de valeur)… Comme, de toutes manières, un utilisateur ne peut jamais faire plusieurs fois partie d'un meme groupe (il en fait partie, ou non, mais il ne peut pas faire partie … trois fois du meme groupe[clindoeil]) et que, partant de ce que j'explique plus haut, tu n'aura jamais qu'un seul groupe… le nombre d'enregistrements sélectionnés sera le nombre… d'utilisateurs qui font partie du groupe… (tu peux le récupérer grace à la fonction PHP mysql_num_rows() [clindoeil]) Ce qui pourrait fonctionner, c'est un code ressemblant à ceci: [code] //une chaine temporaire pour le travail $temp=""; //on se base sur un tableau contenant les grous nommé $tab for($i=0;$i<array_count_values($tab);$i++) { //utilisation de l'opérateur ternaire pour concaténer la chaine //on rajoute une virgue en fin de chaine si ce n'est pas le dernier //élément de la chaine $i!=array_count_values($tab) ? $temp.="'$tab[$i]',": $temp.="'tab[$i]'"; } //on va compter le nombre de groupes et d'utilisateurs distincts renvoyés grace //à cette liste de groupes //cptutil contiendra le nombre d'utilisateur différents et //cptgroup contiendra le nombre de groupe différents (qui devrait correspondre // à array_count_values($tab) :-p) $sql="SELECT *,count(distinct utilisateurs) as cptutil, count(distinct grpUtilisateurs) as cptgrp, from users where $grpUtilisateurs in ($temp) group by grpUtilisateurs"; //on effectue la requete $cherche=mysql_query($sql,$infoconnexion); //on place le tout dans un tableau $trouve=mysql_fetch_assoc($cherche); //si tu le veux, tu récupère le nombre d'enregistrements renvoyés $combien=mysql_num_rows($cherche); [/code]

Modifié par koala01 le 17/06/2006 16:45
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
20,43 €Clé USB 3.1 Sandisk Ultra Luxe 128 Go à 20,43 €
Valable jusqu'au 25 Juillet

Amazon propose la clé USB Sandisk Ultra Luxe d'une capacité de 128 Go à 20,43 €. Cette clé USB 3.1 toute en métal est compatible USB 2.0 et offre de bons débits d'environ 150 Mo/s en lecture et en écriture. Elle inclut le logiciel SanDisk SecureAccess pour un cryptage et une protection par mot de passe de vos données sensibles.


> Voir l'offre
7,28 €Câble antivol Ewent EW1241 (1.5 m, à combinaison) à 7,28 €
Valable jusqu'au 26 Juillet

Amazon fait une promotion sur le câble antivol Ewent EW1241 qui passe à 7,28 € seulement au lieu de 12 €. Ce câble de 1,5 m est universel et facile à utiliser avec n'importe quel ordinateur portable ou de bureau avec un slot de sécurité. intégré. Protégez votre ordinateur contre le vol grâce à la serrure à combinaison à 4 chiffres.


> Voir l'offre
9,99 €Bloc multiprise parasurtenseur BRENNENSTUHL 8 prises à 9,99 €
Valable jusqu'au 25 Juillet

Cdiscount fait une promotion sur le bloc multiprise parasurtenseur BRENNENSTUHL avec 8 prises à orientation inversée qui passe à 9,99 € au lieu de 20 €. Le câble fait 1,4 m.


> Voir l'offre

Sujets relatifs
Trier plusieurs colonnes mysql
tester un champs mysql
Considérer un champs vide mysql non null
rajout données ds champs mysql
test champs base mysql
Wrong parameter count for mysql ==> resolu
mysql : récupérer plusieurs tables
MySQL - somme des valeurs d'un champs [->Résolu
champs de longueur indéfini dans mysql
mySQL: count () ne m'affiche pas tous les enregis
Plus de sujets relatifs à PHP/MySQL: count () plusieurs champs
 > Tous les forums > Forum Forum des Webmasters