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 :

Sous-requête qui affiche des résultats différents pour chaque ligne


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Mai 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Mai 2015
    Messages : 93
    Points : 79
    Points
    79
    Par défaut Sous-requête qui affiche des résultats différents pour chaque ligne
    Bonjour !
    Oui, l'intitulé est tordu

    J'ai un niveau moyen en SQL et j'aimerais votre aide pour une requête (sans blague !)
    J'ai une table projet_course_evenement qui contient tout les objets/aliments a ramener pour un événement ainsi que le nombre maximum.
    J'ai une table projet_course_utilisateur qui contient une clé vers l'ID de projet_course_evenement et une autre vers l'ID des utilisateurs. Cette table contient le montant des objets/aliments que ramène chaque utilisateur pour un événement précis.

    J'ai donc envie de connaitre par une requête le maximum de chaques aliments pour un aliment donné avec aussi ce qui reste a ramener (max-'ce que ramène les gens')
    Sachant que plusieurs utilisateurs peuvent ramener un objet (du moment que ca dépasse pas la valeur max), il me faut l'addition de tout le monde.
    (J’espère que vous avez compris )

    La requête en question que j'essaye de faire marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT distinct pce.id, pce.titre, pce.quantite_max as max, ifnull(pce.quantite_max-(select count(*) from projet_course_utilisateur where id_evenement = 14),0) as reste
    FROM projet_course_evenement pce 
    left join projet_course_utilisateur pcu on pce.id = pcu.id_course 
    WHERE id_evenement = 14
    Mais elle donne ceci :
    Nom : 99c34812a6.png
Affichages : 99
Taille : 4,9 Ko

    Or, il me faut la valeur 3 pour 'vodka' mais 0 pour bière et couscous

    Contenue de projet_course_utilisateur :
    Nom : 900e5ecb1d.png
Affichages : 107
Taille : 3,3 Ko

    Merci pour votre aide.
    Images attachées Images attachées  

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    il faudrait corréler votre sous requete à l'objet de la requete principale, (en plus de l'évènement)

    Avec une description complète des tables, idéalement accompagné d'un jeu d'essai, on pourrait mieux vous aider.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Mai 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Mai 2015
    Messages : 93
    Points : 79
    Points
    79
    Par défaut
    Voila le MCD de PhPMyAdmin :
    Nom : 8fcdac4e17.png
Affichages : 96
Taille : 66,4 Ko

    Par contre, je ne vois pas ce qu'est 'corréler' une requête.
    Si je me rappelle bien de mes cours de SQL, on avez déjà réussi a faire une requête similaire (Mais j'ai oublié la syntaxe )

    Si vous avez besoin de plus d'infos, dites le moi.
    Merci encore.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    est-ce que ceci repond au besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT 
    			pce.id
    		,	pce.titre
    		,	pce.quantite_max AS max
    		,	pce.quantite_max- IFNULL(SUM(pcu.quantite),0) AS reste
    FROM	projet_course_evenement pce 
    LEFT JOIN	projet_course_utilisateur pcu 
    	ON			pce.id = pcu.id_course 
    WHERE id_evenement = 14
    GROUP BY 
    			pce.id
    		,	pce.titre
    		,	pce.quantite_max

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Mai 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Mai 2015
    Messages : 93
    Points : 79
    Points
    79
    Par défaut
    Super ! C'est possible d'avoir une explication rapide ?
    Encore merci !
    EDIT : A nan j'ai compris, c'est le left join en plus du group by qui permet cela. Toujours du mal a assimiler le group by.

    encore merci

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Mai 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Mai 2015
    Messages : 93
    Points : 79
    Points
    79
    Par défaut
    Re bonjour !
    J'aurais encore besoin d'un peu d'aide :S

    Je dois mettre dans une autre colonne ce que a choisi un certain utilisateur.
    J'ai essayé avec ca :
    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
     
    SELECT 
        pce.id 
        , pce.titre 
        , pce.quantite_max AS max 
        , pce.quantite_max- IFNULL(SUM(pcu.quantite),0) AS reste
        , IFNULL(pcu.quantite,0) as value 
    FROM projet_course_evenement pce 
    left join (select * from projet_course_utilisateur where id_utilisateur = 4) pcu 
        on pcu.id_course = pce.id 
    WHERE id_evenement = 14 
    GROUP BY 
        pce.id , 
        pce.titre , 
        pce.quantite_max
    Ça fonctionne mais maintenant la colonne 'reste' ne comptabilise que pour l'utilisateur 4 (ce qui est logique), j'ai encore besoin de ton aide

    Voila où est-ce que ça dois être afficher :
    Nom : a6e6b47549.png
Affichages : 91
Taille : 12,2 Ko
    Dans "je ramène", la valeur 'value" de l'input dois être initialisé a la quantité qu'il a ramener.

    Merci encore d'avance

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    pensez a indenter vos requêtes, cela ne les rend que plus lisibles !

    est-ce ceci que vous voulez :

    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
     
     
    SELECT 
    			pce.id
    		,	pce.titre
    		,	pce.quantite_max AS max
    		,	pce.quantite_max- IFNULL(SUM(pcu.quantite),0) AS reste
    		,	IFNULL(SUM(CASE WHEN pcu.id_utilisateur = 4 THEN pcu.quantite END),0) AS ApporteParUtilisateur4
    FROM	projet_course_evenement pce 
    LEFT JOIN	projet_course_utilisateur pcu 
    	ON			pce.id = pcu.id_course 
    WHERE id_evenement = 14
    GROUP BY 
    			pce.id
    		,	pce.titre
    		,	pce.quantite_max

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Back-End
    Inscrit en
    Mai 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Mai 2015
    Messages : 93
    Points : 79
    Points
    79
    Par défaut
    encore merci !
    Je ne connaissais pas CASE WHEN

    Entendu pour l'indentation désolé ! :S

    encore merci

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/10/2014, 10h10
  2. Réponses: 3
    Dernier message: 04/05/2011, 15h27
  3. Réponses: 17
    Dernier message: 09/02/2010, 16h22
  4. Réponses: 6
    Dernier message: 25/03/2008, 16h13
  5. Réponses: 2
    Dernier message: 25/11/2007, 16h37

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