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

 MySQL Discussion :

requêtes multitables sur cette base de données


Sujet :

MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut requêtes multitables sur cette base de données
    Salut à toutes et à tous,

    Face à cette BDD Nom : BNZJIQV.png
Affichages : 162
Taille : 22,1 Ko

    je dois répondre à ces questions-là, mais en utilisant les requêtes multitables
    Rappel:
    -- Prix Toutes Taxes Comprises à payer par le client = Prix Hors Taxes * ( 1 + %TVA )
    -- TVA = 20% = 0,2
    -- TTC = HT * 1,2


    -- 17) Le prix à payer pour les clients qui n'ont rien acheté l'année 2015

    -- idClt fullName HT TTC
    -- 4 mimi sara 2000 2400



    -- 18) Le prix à payer pour chaque client pour ses commandes. Ordonnez le résultat selon le prix

    -- idClt fullName TTC
    -- ? ? ?



    -- 19) Les clients qui achètent des produits autres que le produit 1.

    -- idClt fullName
    -- ? ?
    Pour la 17eme question, j'en ai fait une requête mais je ne sais pas pourquoi ça me donne EMPTY.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select concat(nom,prenom) from client where idclt in 
    (select idclt from commande where idpdt in
    (select idpdt from produit where datecmd < 2015 ));
    Pour la 18eme, j'ai tout essayé pour ordonner les prix, mais ça m'affiche juste les prix *1.2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     select (prix*1.2) from produit where idpdt in
     ( select idpdt from commande where idclt in
      ( select idclt from client group by concat(nom,prenom) order by prix
      ));
    Et je voudrais, svp, les erreurs que j'ai faites afin de ne pas avoir le résultat souhaité.
    J'espère que les règles de base des requêtes multitables sont respectés ^^

    P.S. : j'utilise la console MYSQL de wampserver.


    Merci d'avance

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Apparemment, vous ne connaissez pas les jointures !

    17) Le prix à payer pour les clients qui n'ont rien acheté l'année 2015
    Quels sont les clients qui n'ont rien acheté en 2015 ?
    Ce sont les clients pour lesquels il n'existe pas de commande dont la date de commande est entre le 01/01/2015 et le 31/12/2015 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT c.idClt
    FROM client c
    WHERE NOT EXISTS
    (
    	SELECT *
    	FROM commande cd
    	WHERE cd.idClt = c.idClt
    		AND cd.dateCmd BETWEEN '2015-01-01' AND '2015-12-31'
    )
    Quant au prix à payer, vu que vous ne donnez pas de règles qui justifierait un prix différent pour ces clients, la base de données ne donne que les prix de base des produits donc ce sont ces prix là qui s'appliquent, non ?

    Ou alors la demande est mal formulée.

    pour la 18 eme j'ai essayé tout pour ordonner les prix mais sa m'affiche juste les prix *1.2
    Forcément puisque vous ne sélectionnez que le prix !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Salut ^^

    Merci d'avoir répondu

    Ben pour la première question, je ne veux pas seulement le idclt mais aussi le nom , chose que j'ai réussi à faire.

    Je veux le prix à payer pour les clients qui n'ont pas acheté en 2015.

    Pour la deuxième question, j'ai sélectionné le prix, oui, mais comment je vais grouper chaque client et sa somme ? un group by est nécessaire je pense, non ?

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    je veux le prix a payer pour les clients qui n'ont pas acheté en 2015 ,
    Votre formulation est ambigüe.

    Elle suppose que les clients qui n'ont pas encore acheté en 2015 paieront les produits qu'ils commanderont au tarif de base et que les autres (ayant déjà acheté quelque chose en 2015, donc) auront une remise.

    J'ai plutôt l'impression qu'on vous demande le chiffre d'affaire total réalisé avec les clients qui n'ont pas encore acheté quelque chose en 2015. C'est ça ?

    18) Le prix à payer pour chaque client pour ses commandes. Ordonnez le résultat selon le prix
    Là aussi, la formulation "le prix à payer" semble indiquer un futur alors que des commandes datent de 2014 !
    Ça devrait plutôt être "le prix payé" ou bien "le prix facturé".

    Bref, faites d'abord la somme des (prix * quantité) par client. Oui, il faut un GROUP BY. puis ordonnez (ORDER BY) le résultat de l'opération.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Salut

    Pour la 18eme question, je pense que je me rapproche de la bonne réponse.

    Nom : 6EsdJi9.png
Affichages : 162
Taille : 9,4 Ko

    Mais ce que je veux, ce n'est pas seulement le order by des prix, mais aussi sommer les prix du l'idclt 6. Par exemple, idclt 6 a 300 et 1800 donc idclt6 a comme somme 2100 ; voilà, c'est la réponse attendue, mais je ne sais pas comment faire ce dernier truc , voici la requête que j'ai utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select 1.2*p.prix*cmd.quantite , c.idclt,concat(nom, prenom) from produit 
     p  , client c , commande cmd where p.idpdt=cmd.idpdt and c.idclt =cmd.idclt order by (prix)

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Les jointures s'écrivent depuis plus de 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !

    Si vous ordonnez par la colonne prix, vous ne tenez pas compte des quantités et encore moins du total payé par le client de toutes ses commandes... puisque vous ne l'avez même pas programmé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT c.idClt, c.nom, c.prenom,
    	SUM(1.2 * p.prix * cmd.quantite) AS total_client
    FROM client c
    INNER JOIN commande cmd ON cmd.idClt = c.idClt
    	INNER JOIN produit p ON p.idPdt = cmd.idPdt
    GROUP BY c.idClt, c.nom, c.prenom
    ORDER BY total_client
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    etudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Salut,

    Bon, la question, c'est que je dois utiliser la requête multitables (c-à-d où il y a plusieurs tables dans le FROM).

    Avec inner join et natural join, ça passe.

    Concernant la première question, eh bien j'ai fait un UPDATE pour répondre à la question.

    Pièce jointe 172616

    Le prix à payer pour les clients qui n'ont rien acheté l'année 2015 :
    Bon ! À part afficher le prix, je veux afficher juste au début ceux qui n'ont rien acheté en 2015, c-à-d ceux qui ont acheté en 2014, juste en 2014, donc je dois avoir juste IDCLT 4.

    Eh bien la requête que j'ai utilisée me donne aussi celui qui a acheté en 2014 et en 2015 (idclt 1).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     select c.idclt from client c , commande cmd
     where c.idclt=cmd.idclt and cmd.datecmd
     between '2014-01-01' and '2014-12-31' ;
    Je ne veux pas faire apparaître aussi celui qui a acheté en 2014 et en 2015.

Discussions similaires

  1. [2008] Requête SQL sur une base de données en python
    Par noramokh dans le forum Développement
    Réponses: 2
    Dernier message: 16/02/2015, 17h02
  2. Réponses: 11
    Dernier message: 22/01/2014, 19h30
  3. [PDO] Requêtes sur plusieurs bases de données
    Par nabab dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/08/2007, 08h11
  4. Requête sur plusieurs bases de données
    Par Oluha dans le forum ASP
    Réponses: 8
    Dernier message: 14/10/2005, 14h57

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