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 :

Tableau à deux dimensions à partir de 3 tables


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut Tableau à deux dimensions à partir de 3 tables
    Bonsoir,

    ma base est, entre autres, constituée de 3 tables avec les champs suivants :
    client : id_filière, id_promo
    filiere : id, nom (valeur : Info, Elec, Telecom)
    promo : id, nom (valeur : 1A, 2A, 3A)

    Ce que j'aimerai faire, c'est un tableau qui donne le nombre de clients appartenant à une promo et à une filière. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ~~| Info |Elec | Telecom
    ---+ ----+----+--------      
    1A |  27  | 36  | 12
    ---+-----+----+--------
    2A |  10  | 89  | 23
    ---+-----+----+--------
    3A |  45  | 39  | 74
    ---+-----+----+--------
    Je ne sais pas comment faire pour obtenir à la fois des éléments en colonne et en ligne.
    Sachant que par la suite je dois pouvoir calculer la somme sur les lignes et les colonnes. Mais ça, je pensais le faire en PHP.

    Merci par avance. Je vais continuer à chercher de mon côté.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par Thompey Voir le message
    Je ne sais pas comment faire pour obtenir à la fois des éléments en colonne et en ligne.
    Le SQL ne le permet pas, à moins de faire un truc tordu.
    Au mieux il est possible d'avoir un résultat du style

    Promo | Filière | Count

    Ce résultat contiendra toutes les données souhaitées, mais présentées différemment.
    Ensuite en PHP, ça ne devrait pas être très compliqué pour fabriquer le tableau.

  3. #3
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Tu peux t'inspirer de mon article afférent à l'émulation d'un tableau croisé [quasi]-dynamique dont le lien est dans ma signature.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Pas si tordu que ça ! Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT p.nom, 
        SUM(CASE f.nom = 'Info' THEN 1 ELSE 0 END) AS Info,
        SUM(CASE f.nom = 'Elec' THEN 1 ELSE 0 END) AS Elec,
        SUM(CASE f.nom = 'Telecom' THEN 1 ELSE 0 END) AS Telecom
    FROM client AS c
    INNER JOIN filiere AS f ON f.id = c.id_filiere
    INNER JOIN promo AS p ON p.id = c.id_promo
    GROUP BY p.nom
    ORDER BY p.nom
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut
    @CinePhil : J'obtiens cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    You have an error in your SQL syntax; check the manual that corresponds 
    to your MySQL server version for the right syntax to use near 
    'THEN 1 ELSE 0 END) AS Info, SUM(CASE f.nom = 'Elec' THEN 1 ELSE 0 EN' 
    at line 2
    @Maljuna Kris :
    avant de poster sur le forum j'avais lu ton article. Dans la création de la première table, il manque une virgule. Mais pour les requetes qui suivent (pour la construction du tableau) j'ai une erreur avec une "mauvaise utilisation" du ROLLUP.

    Merci pour vos réponses

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    il a oublié les WHEN dans le CASE.

    A lire : http://sqlpro.developpez.com/cours/sqlaz/select/#L7

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Oups ! Au temps pour moi ! SQLPro a raison !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT p.nom, 
        SUM(CASE WHEN f.nom = 'Info' THEN 1 ELSE 0 END) AS Info,
        SUM(CASE WHEN f.nom = 'Elec' THEN 1 ELSE 0 END) AS Elec,
        SUM(CASE WHEN f.nom = 'Telecom' THEN 1 ELSE 0 END) AS Telecom
    FROM client AS c
    INNER JOIN filiere AS f ON f.id = c.id_filiere
    INNER JOIN promo AS p ON p.id = c.id_promo
    GROUP BY p.nom
    ORDER BY p.nom
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] tri de tableau deux dimensions
    Par oursquetaire dans le forum Langage
    Réponses: 8
    Dernier message: 27/12/2005, 14h27
  2. Affichage d'un tableau à deux dimensions.
    Par Allan dans le forum C
    Réponses: 3
    Dernier message: 11/12/2005, 18h29
  3. Réponses: 1
    Dernier message: 18/11/2005, 11h38
  4. tri alphabétique dans un tableau deux dimensions
    Par *!!cocco!!* dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 06/12/2004, 21h38
  5. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 14h50

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