IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Comptages multiples et addition, je m'en sort plus.


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Comptages multiples et addition, je m'en sort plus.
    Bonjour à tous !

    J'ai un souci sur lequel je bloque depuis 24 heures. J'ai tout essayé, la recherche sur ce forum (qui m'a d'ailleurs donné quelques pistes), la recherche sur google, sur d'autres sites d'aide... Et je n'ai toujours pas trouvé la solution.

    Voilà mon problème:

    J'ai une table 'produit' qui répertorie des pédales d'effets pour guitaristes avec différentes caractéristiques. L'une des colonnes s'appelle 'id_sous_categorie' et fait référence à la table 'sous_categorie' qui contient toutes les sous-catégories possibles d'effets (ex: distorsion, phaser, flanger...)

    Je crée une page catalogue où on pourra explorer tous les produits à partir de liens.

    Je ne veux pas afficher toutes mes sous-catégories l'une apres l'autre, parce qu'il y en a trop. Donc je voudrais les regrouper. Par exemple: les distrosions, overdrive et fuzz ensemble:

    Distorsion / Overdrive / Fuzz ( $nbre de produit)

    et entre parenthese je veux afficher le nombre de produits que contient cet ensemble qui regroupe 3 sous-catégories.

    (je remercie ceux qui ont eu le courage et la patience de lire jusqu'ici )

    Maintenant, j'en viens à la requete que je dois faire pour obtenir ça ! Et là, je suis complètement bloqué.

    La seule solution que j'ai pour l'instant, en attendant mieux, c'est de faire une requete avec COUNT(*) pour compter le nombre de produit qu'il y a dans chaque ensemble. J'ai 5 ensembles et donc 5 requetes du type:

    SELECT COUNT(*) FROM produit WHERE sous_categorie in('distorsion','overdrive',fuzz')

    Ca me donne le nombre de produit que contient cet ensemble de 3 sous-catégories.
    Et je recommence la requete pour le 2ème ensemble qui comprend les chorus, compresseur et noise supressor...

    J'ai tout exploré et essayé, mais je n'ai pas la solution ???

    Je ne demande pas une réponse sous forme de code précis. Simplement j'aimerais comprendre le concept à utiliser pour m'en sortir dans ce cas en une seule requête, que ce soit avec GROUP BY, une requete imbriquée ou une jointure, qui sait ?

    Merci d'avance...

    Bon j'ai un peu plus de précision:

    Donc je fait la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $requete = mysql_query ('
                    SELECT id_ss_categorie, COUNT(*) AS sous_categorie
                    FROM produit
                    GROUP BY id_ss_categorie
                    ');
    Puis je récupère le tout dans une boucle et affiche le résultat avec un print_r:

    La boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while ($resultat = mysql_fetch_array($requete))
                    {
                            print_r($resultat);
                            echo '<br />';
     
                    }
    Ca m'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Array ( [0] => 2 [id_ss_categorie] => 2 [1] => 4 [sous_categorie] => 4 )
    Array ( [0] => 5 [id_ss_categorie] => 5 [1] => 1 [sous_categorie] => 1 )
    Array ( [0] => 6 [id_ss_categorie] => 6 [1] => 1 [sous_categorie] => 1 )
    Array ( [0] => 7 [id_ss_categorie] => 7 [1] => 1 [sous_categorie] => 1 )
    Array ( [0] => 8 [id_ss_categorie] => 8 [1] => 1 [sous_categorie] => 1 )
    Array ( [0] => 11 [id_ss_categorie] => 11 [1] => 1 [sous_categorie] => 1 )
    Donc là je sais que j'ai 4 produits de la sous-catégorie 2, 1 produit de la sous-catégorie 5, 1 produit de la sous-catégorie 6...

    Mais voilà, mon souci, c'est que je veux regrouper certaines sous-catégories en ensemble de sous-catégories et compter le nombre de produits qu'il y a dans chaque ensemble de sous-catégories.
    Par exemple, je veux compter tous les produits de l'ensemble qui regroupe les sous-catégories 1, 2, 3 et 4. Ce qui dans mon exemple me donne 4 produits. Puis compter les produits présents dans l'ensemble de sous-catégories 5, 6 et 7...

    Et tout ça je veux le faire en une seule requete et une boucle.

    Pour m'éviter de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $requete = mysql_query ('
    SELECT COUNT(*)
    FROM produit
    WHERE id_ss_categorie IN (1, 2, 3, 4)
    ')
    Et répéter cette requête pour avoir le nombre de produits présents dans les autres ensembles de sous-catégories.

    Je ne sais pas si j'ai été clair, mais voilà le problème où je bloque o_O

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Je ne veux pas afficher toutes mes sous-catégories l'une apres l'autre, parce qu'il y en a trop. Donc je voudrais les regrouper. Par exemple: les distrosions, overdrive et fuzz ensemble
    Tu as donc la solution: introduire un code de regroupement pour chaque ss-catégorie...
    Idéalement, dans une table supplémentaire, mais tu peux t'en tirer par une simple colonne permettant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY id_regroupement
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE id_ss_categorie IN (1, 2, 3, 4)
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse Qi130

    J'avais pensé à ça, ajouter à ma table 'produit' une colonne 'type_effet' regroupant différents types d'effet. Ca m'oblige à recoder la page d'insertion des nouveaux produits et d'autres pages mais faute de mieux, c'est ce que je vais faire.

    Dommage ! J'ai pourtant passé du temps sur la doc officielle mysql, mais je n'arrive pas à trouvé une solution simple en SQL !

    Mais je ne désespère pas !

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bon finalement, j'opte pour des requêtes imbriquées. C'est peut-etre lourd et pas très élégant mais ça marche:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    $requete = mysql_query ('
                    SELECT
                    (SELECT COUNT(*)
                    FROM produit
                    WHERE id_ss_categorie IN (1,2,3,4))
                    AS ss_categorie1,
                    (SELECT COUNT(*)
                    FROM produit
                    WHERE id_ss_categorie IN (5,8,17))
                    AS ss_categorie2,
                    (SELECT COUNT(*)
                    FROM produit
                    WHERE id_ss_categorie IN (6,7,11,12))
                    AS ss_categorie3,
                    (SELECT COUNT(*)
                    FROM produit
                    WHERE id_ss_categorie IN (9,10,18))
                    AS ss_categorie4,
                    (SELECT COUNT(*)
                    FROM produit
                    WHERE id_ss_categorie = 13)
                    AS ss_categorie5,
                    (SELECT COUNT(*)
                    FROM produit
                    WHERE id_ss_categorie = 14)
                    AS ss_categorie6
                    ');
     
            $resultat = mysql_fetch_array($requete);
    Et je récupère le tout avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $resultat['ss_categorie1'];
    $resultat['ss_categorie2'];
    $resultat['ss_categorie3'];
    ...
    Voilà, j'ai utilisé des requêtes imbriqués, surement très lourdes mais ça fait 2 jours que je bloque sur mon problème

  5. #5
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Si ça ne pose pas de problème de perf pourquoi pas. Mais comme l'a dit qi130, avec une table supplémentaire servant à définir les groupes de catégories ça aurait été plus souple et plus propre, et probablement plus rapide.

Discussions similaires

  1. VBA-E: Macro de comptage multiple sous condition
    Par acipolla dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/02/2014, 16h47
  2. Comparer multiplications et additions
    Par Rodolphe2005 dans le forum Débuter
    Réponses: 9
    Dernier message: 14/09/2011, 19h03
  3. multiplication en addition
    Par founiete dans le forum Débuter
    Réponses: 6
    Dernier message: 08/12/2010, 21h28
  4. multiplication et addition au systeme binaire
    Par kim sam dans le forum Débuter
    Réponses: 3
    Dernier message: 01/11/2010, 20h37
  5. Réponses: 7
    Dernier message: 23/10/2006, 20h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo