Bonjour,
Je souhaiterais récuperer dans une colonne toute les ligne qui sont = x et aprés les compter.

Exemple :

Dans la base donné on a une colonne is_admin qui est un group = x et is_membre qui est = x On va imaginez quand à 10 membres et 5 admin.
Je voudrais savoir comment récuper les 5 admin dans la base de donné avec la requete count() le probléme c'est que j'ai plusieurs group avec des id différent.

9 réponses


SLK
Réponse acceptée

Ah ouais bien vu Balbert !

Par contre ça retourne un gros tableau un peu pénible à utiliser.
Pour en revenir à un tableau simple on peut faire un truc comme ça :

$req = $this->_getDb()->fetchAssoc('
      SELECT user_group_id
      COUNT(username)
      FROM xf_user
      WHERE user_group_id
          IN (1, 2, 3)
      GROUP BY user_group_id
');

echo '<pre>';
print_r($req);
echo '</pre>';

$nb_utilisateurs_par_group = [];

foreach ($req as $key => $value)
{
    $nb_utilisateurs_par_group += [
        $value['user_group_id'] => $value['COUNT(username)']
    ];
}

echo '<pre>';
print_r($nb_utilisateurs_par_group);
echo '</pre>';

J'ai pas vraiment saisi la question, que cherches-tu à faire ?

Bonsoir.
Si je comprends bien, tu veux à la fois récupérer le nombre d'utilisateurs qu'il y a dans chaque groupe/rôle, mais aussi pouvoir les lister selon leur groupe à travers d'une seule requête SQL ?

Oui. Mais afficher le nombre d'utilisateurs par groupe

Salut,

c'est compliqué, j'ai beau relire, je ne comprend pas...

Essaie de reformuler cette phrase :
on a une colonne is_admin qui est un group = x et is_membre qui est = x

On va imaginez quand à 10 membres et 5 admin.
Est-ce que tu veux dire :
Pour l'exemple, disons qu'il ya dans la base de données : 10 membres, et 5 admins.

Je voudrais savoir comment récuper les 5 admin dans la base de donné avec la requete count()
Est-ce que tu veux dire que tu n'as pas vraiment besoin de récupérer les admins, mais seulement de les compter ?

le probléme c'est que j'ai plusieurs group avec des id différent.
Donne nous le nom de ta table, ainsi que tous ses champs, ça va beaucoup nous aider à comprendre.

En plus j'ai l'impression que Lartak te dit une chose, et que tu redemande la même chose xD

  • Si je comprends bien, tu veux à la fois récupérer le nombre d'utilisateurs qu'il y a dans chaque groupe/rôle, mais aussi pouvoir les lister selon leur groupe à travers d'une seule requête SQL ?
  • Oui. Mais afficher le nombre d'utilisateurs par groupe

Ses pas évident a expliquer.
Voila la table xf_user

Dans la table xf_user Nous avons une collone user_group_id je voudrais récuperer par exemple tout les utilisateur qui on l'id 3 sauf que à l'avenir il peuvent créer des nouveaux groupes donc on peut avoir 5 groupes. Donc je voudrais que de façons automatique cela compte le nombre d'utilisateur dans chaque groupe.

J'ai essayer de faire sa :

$req = $this->_getDb()->fetchAssoc('
        SELECT 
        COUNT(username)
        FROM
        xf_user
        WHERE user_group_id IN (1,2,3 )
        ');

        return $req;

J'obtient sa avec un var_dump

 2 => 
    array (size=1)
      'COUNT(username)' => int 2

Je voudrais donc que sa affiche le nombre d'utilisateur par groupes.

Ex :
id1 = 5 user
id2 = 2user
id3 = 3user

Ah je vois.

Je ne crois pas qu'on puisse tout faire d'un coup (si je me trompe, dites le moi)
Alors soit :

  • on fait plusieurs requêtes (chacune ciblant 1 seul ID)
  • on travail un peu le tableau, que nous retourne la requête qui cible tous les IDs

    Je te montre une idée pour "faire" la 2ème proposition :

    
    $req = $this->_getDb()->fetchAssoc('
        SELECT category_id
        FROM posts
        WHERE category_id
            IN (1, 2, 3)
    ');

$i = 0;
$max = count($req);
while ($i < $max)
{
$req[$i] = $req[$i]['category_id'];
$i++;
}

$nb_utilisateurs_par_group = array_count_values($req);


 J'avais essayé avec un foreach à la place du while au début, mais je n'ai pas réussi...

// j'ai essayé ça
foreach ($req as $entry)
{
$entry = $entry['category_id'];
}

// et ça
foreach ($req as $key => $value)
{
$key = $value['category_id'];
}

D'accord je vais essayer du coup

Salut il y a plus simple:

      SELECT 
        user_group_id, 
        COUNT(username)
        FROM
        xf_user
        WHERE user_group_id IN (1,2,3) 
        GROUP BY   user_group_id