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 :

un seul résultat pour plusieurs requètes


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 22
    Points : 24
    Points
    24
    Par défaut un seul résultat pour plusieurs requètes
    Bonjour,

    Je vais essayer de simplifier au maximum mon exemple pour vous exposer mon problème.

    Voici mes tables :

    table diplome(id_diplome,...)
    table matiere(id_matiere, matiere_duree, ...
    table asso_diplome_matiere(id_diplome,id_matiere)

    J'ai donc une requète qui calcule la durée de mes diplomes en fonction de la somme des matieres qui le compose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT diplome.id_diplome, SUM(matiere_duree) AS duree_totale
    FROM diplome, matiere, asso_diplome_matiere
    WHERE asso_diplome_matiere.id_diplome = diplome.id_diplome
    AND asso_diplome_matiere.id_matiere = ue.id_matiere
    GROUP BY diplome.id_diplome
    J'obtiens la table suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id_diplome  duree_totale
    ----------  ---------
    diplome1   50
    diplome2   35
    Ensuite, j'ai besoin d'utiliser duree_totale dans une requète qui liste toutes les ressources des diplomes :

    table ressource(id_ressource, duree)
    table asso_ressource_diplome(id_ressource, id_diplome)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT diplome.id_diplome, ressource.id_ressource,
    (ressource_duree * 100 / duree_totale) AS pourcentage
    FROM ressource, diplome
    WHERE asso_ressource_diplome.id_ressource = diplome.id_ressource
    AND asso_ressource_diplome.id_diplome = diplome.id_diplome
    Mon résultat sans pourcentage ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    id_diplome  id_ressource
    ---------  ---------
    diplome1  ressource1
    diplome1  ressource2
    diplome2  ressource1
    etc...
    Comment je fais pour utiliser le résultat duree_totale de ma première requète pour obtenir le resultat pourcentage dans ma deuxième requète ?

    Désolé d'avoir été long mais je n'arrive pas à faire plus simple (et ça doit être pour ça que je n'arrive pas à trouver la solution).

  2. #2
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Salut,

    Je suppose que tu utilises un langage de programmation en plus du SQL. Tu peux facilement réaliser ta première requête, parcourir les résultats et faire ta nouvelle requête en passant comme paramètres l'id du diplome et sa durée.

    Sinon, en SQL, tu peux faire ça avec des requêtes imbriquées. Quelque chose de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT ddt.id_diplome, r.id_ressource, (r.duree * 100 / ddt.duree_totale) AS pourcentage
    FROM 
    (
    	SELECT d.id_diplome, SUM(m.matiere_duree) AS duree_totale
    	FROM diplome d
    	JOIN asso_diplome_matiere adm ON adm.id_diplome = d.id_diplome
    	JOIN matiere m ON m.id_matiere = adm.id_matiere
    	GROUP BY d.id_diplome
    ) diplome_duree_totale ddt
    JOIN asso_ressource_diplome ard ON ard.id_diplome = ddt.id_diplome
    JOIN ressource r ON r.id_ressource = ard.id_ressource
    J'en ai profité pour remplacer tes jointures avec des WHERE par des jointures propres Autant en profiter pour prendre les bonnes habitudes.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 22
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup. C'est vrai que je manque énormément d'expérience en SQL, ce qui fait que je ne m'y sens pas à l'aise.

    Comme tu l'as deviné je faisais le calcul en PHP, et donc deux requètes différentes, mais sachant que je pouvais le faire directement en une requète SQL, ça m'énervait de le faire en PHP.

    Et merci aussi pour les jointures, pour ça aussi il faut absolument que je prennne le pli.

    edit : en fait, faire des requètes imbriquées, ça équivaut à créer une table temporaire utilisée uniquement pour la requète ?

  4. #4
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Citation Envoyé par MmoulinexX
    edit : en fait, faire des requètes imbriquées, ça équivaut à créer une table temporaire utilisée uniquement pour la requète ?
    C'est en effet stocké temporairement en RAM, et seulement accessible par la requête elle-même. Pour avoir plus de détails sur l'implémentation interne, il faut demander aux programmeurs de MySQL ou regarder le code source

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

Discussions similaires

  1. Un seul résultat pour plusieurs hypothèses
    Par Henri DUBAC dans le forum Excel
    Réponses: 4
    Dernier message: 30/09/2009, 17h29
  2. Un Seul TQuery pour plusieurs requêtes
    Par souminet dans le forum Bases de données
    Réponses: 5
    Dernier message: 08/02/2008, 15h10
  3. Réponses: 6
    Dernier message: 18/09/2007, 17h10
  4. Réponses: 7
    Dernier message: 01/02/2006, 15h49
  5. [C#] Une seule méthode pour plusieurs composants
    Par niPrM dans le forum Windows Forms
    Réponses: 8
    Dernier message: 01/06/2004, 14h41

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