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

Langage SQL Discussion :

Problème sur base de données


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème sur base de données
    Bonjour,

    Je suis entrain de travailler sur un projet pour gérer des commandes clients.
    Ma base se décompose comme ceci :
    Table Client :
    ID
    Nom
    Prénom
    Tel
    Mail
    Commentaire

    Table Commande :
    ID
    Date
    Accompte
    Commentaire
    Prévenu le
    ID_client

    Table Articles :
    ID
    Ref
    Désignation
    Qté
    Prix
    ID_fournisseur
    commandé (oui / non)
    livré (oui / non)
    pris (oui / non)
    Commentaire
    ID_commande

    Table fournisseur :
    ID
    fournisseur

    J'ai presque terminé, mais là ou je bute vraiment c'est sur une requête que je n'arrive pas à créer :
    Il faudrait que je puisse me sortir la liste des clients à prévenir (suite à une livraison) CàD :
    Client nom
    Client prénom
    Commande ID
    Commande date
    Commande prévenu
    Quand articles.livré = 1 ET articles.commandé=1 ET articles.pris=0
    Et aussi Commande.prévenu=null

    Merci pour votre aide.

    Fred.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Quelle est la partie qui vous pose problème?
    Cette requête ne convient-elle pas?
    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 
           clt.nom,
           clt.prénom,
           cmd.id,
           cmd.date,
           cmd.prévenu
    FROM client clt
    JOIN commande cmd ON clt.id = cmd.id_client
    JOIN articles art ON cmd.id = art.id_commande
    WHERE art.livre = 1
      AND art.commande = 1
      AND art.pris = 0
      AND cmd.prevenu IS NULL

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Cette requête doit sans doute être la bonne. Cependant n'étant pas un utilisateur expérimenté, j'ai du mal à en comprendre la syntaxe, notamment au niveau des 'JOIN commande cmd'
    Je suppose qu'il doit s'agir d'Alias ? (concept que je ne maîtrise pas encore tout à fait)

    J'ai donc 'traduit' votre requête pour qu'elle corresponde à mes noms de tables et de champs. Cela donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 
           clt.nom,
           clt.prenom,
           cmd.ID,
           cmd.date,
           cmd.prevenu
    FROM client clt
    JOIN commande cmd ON clt.ID = cmd.ID_client
    JOIN articles art ON cmd.ID = art.ID_commande
    WHERE art.livre = 1
      AND art.commande = 1
      AND art.pris = 0
      AND cmd.prevenu IS NULL
    Hélas cette requête ne renvoie aucun enregistrement. Pourtant dans ma base plusieurs enregistrements correspondent à ces critères.

    Avez vous une idée ?

    Merci beaucoup.

  4. #4
    Membre averti Avatar de _Xavier_
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2009
    Messages : 311
    Points : 390
    Points
    390
    Par défaut
    La table article est mal modélisée. Il manque aussi des informations dans la table Commande, idArticle, idFournisseur et tous les champs qui sont liés à la livraison.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Si la requête ne vous renvoie aucune ligne, commencez par supprimer la clause WHERE. Si elle ne vous renvoie toujours rien, c'est un problème au niveau des jointures.
    Sinon, ajoutez les clauses une par une pour voir laquelle ou lesquelles filtrent toutes les lignes.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Citation Envoyé par Frédéric.S Voir le message
    Cependant n'étant pas un utilisateur expérimenté, j'ai du mal à en comprendre la syntaxe, notamment au niveau des 'JOIN commande cmd'
    Je suppose qu'il doit s'agir d'Alias ? (concept que je ne maîtrise pas encore tout à fait)
    Effectivement, dans la requête cmd est un alias.
    On pourrait également écrire la requête ainsi, ce qui est un peu plus lourd mais plus facilement compréhensible pour un anglophone (ajout du mot clé AS) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 
           clt.nom,
           clt.prénom,
           cmd.id,
           cmd.date,
           cmd.prévenu
    FROM client AS clt
    JOIN commande AS cmd ON clt.id = cmd.id_client
    JOIN articles AS art ON cmd.id = art.id_commande
    WHERE art.livre = 1
      AND art.commande = 1
      AND art.pris = 0
      AND cmd.prevenu IS NULL
    Le mot clé JOIN sert à faire une jointure. Cela signifie qu'on va "lier" les tables à partir de la condition fournie après le ON.
    Dans ton cas, on va par exemple joindre à chaque ligne de la table client les lignes de la table commande qui contiennent l'id_client de cette ligne.

    Si ça te permet de mieux comprendre ce qui se passe...

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Oui, ça devient beaucoup plus clair maintenant.
    Merci à tous pour vos explications.
    Avec ça je devrais arriver à m'en sortir.

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Si tout fonctionne, n'oublie pas de cliquer sur

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

Discussions similaires

  1. Problème de droit sur base de données Access
    Par Wizard50 dans le forum Access
    Réponses: 1
    Dernier message: 31/05/2010, 13h06
  2. problème de sauvegarde sur base de données
    Par thunderpat dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/12/2007, 15h10
  3. 2 Problèmes sur Base de Donnée
    Par jockyboss777 dans le forum VB.NET
    Réponses: 18
    Dernier message: 19/10/2007, 23h11
  4. [MySQL] Problème de boucle while sur base de données
    Par Darhyl dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/05/2006, 15h11

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