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 :

Lier deux tables avec une clé et requête correspondante


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Lier deux tables avec une clé et requête correspondante
    Bonjour les amis ,

    Etant une débutante dans ce qui se rapporte aux bases de données et requêtes , je ne sais pas trop comment m'y prendre pour créer une requête me donnant le résultat suivant : Solde du compte client(ht) pour un intervalle de temps ( entre deux dates différentes) , le but étant d'avoir le solde chaque semaine ou chaque mois (je ne sais pas si cela est possible).

    J'ai deux tables : compte client et compte-transaction , la table compte client contient les champs : id(clé primaire), nom, prénom , la table compte-transaction contient les champs suivant : id(clé primaire), type-id, quantité, prix ht ,tva .date

    Un client recharge sa carte à une date "t" mais peut consommer ou non cette recharge , le champs type-id contient les occurences : rechargement , consommation et décréditation ( il arrive qu'une consommation ne soit pas remontée au niveau du progiciel de l'entreprise , donc on décrédite la carte du montant de la consommation manuellement) , notons que le solde = rechargement-(consommation + décréditation "s'il y en a");

    Question : je travaille sur une base de données réelle (d'une société) , j'ai remarqué que les deux tables ne sont pas liées. Est-il possible de les lier par une clé, même si elles ont déjà été créées ? Si oui, je vous prie de me dire comment m'y prendre ? une fois la clé créée , quelle requête puis-je utiliser pour aboutir au résultat souhaité ? Je vous remercie de m'avoir lue et vous prie de m'apporter votre aide, j'en ai réellement besoin .

    Cordialement;

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 014
    Points : 23 702
    Points
    23 702
    Par défaut
    Bonjour et bienvenue sur le forum,

    A lire votre schéma, on peut vous retourner la question que celle que vous posez : comment faites-vous, pour l'instant, pour savoir à quel compte client se rattache une transaction.
    Là, dans la table compte-transaction, il n'y a aucune référence au client... Comment pouvez-vous faire cette référence, ce lien ?
    C'est d'abord par là qu'il faut chercher pour établir une clé étrangère des transactions vers les clients...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je vous remercie de votre retour rapide. En fait, je ne saurais pas trop répondre à cette question puisque, faute de communication, je n'ai pas toutes les informations qu'il me faut. Mais là, je pourrais vous dire qu'il n'y aucune clé qui lie les deux tables, à moins que id soit ce qui les lie, chose qui n'est pas possible parce que l'on a une relation 1 à plusieurs ici. Est-ce qu'il m'est possible d'introduire une clé étrangère dans la table account-transaction ? Si oui, je vous prie de me dire comment ?
    Sinon, dans le cas où une clé lie les deux tables, quelle requête utiliser pour avoir le solde à une date donnée ? Je sais que je demande trop, mais je n'ai pas le choix en fait , il m'est demandé ce travail même si ce n'est pas du tout mon domaine ! J'ai besoin d'aide !

  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
    Bonjour,

    Techniquement, il possible d'ajouter la clef étrangère... mais comment allez vous renseigner les valeurs ?

    Si rien dans votre base ne relie une transaction à un client, c'est qu'il y a un problème !

    N'auriez vous pas une troisième table qui fasse le lien ?

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    J'ai du nouveau par rapport à ma requête , en fait après avoir fouillé un peu ; j'ai trouvé la table client qui est lié à la table transaction , voici donc le détails :

    Ma table client contient les champs suivants : Id(client), nom, prénom,date de création de compte;
    Ma table transaction contient les champs suivants: Id(Transaction),type de transaction,quantité, Montant HT, tva,TTC ,ID(client), date de transaction
    Notons que le champs type de transaction renvoie au valeurs suivantes : 5,11,21 (identifiants renvoyant à des montant ) : Quand c'est 5 rechargement etc.

    information complémentaire : je ne sais pas si on en aura besoin , il existe une 3 ème table : type de transaction lié à la table transaction par la clé : Id(transaction):elle contient deux champs : id(transaction) et type de transaction :5 renvoie au rechargement(type), 11 à la consommation(type) et 21 à la décréditation manuelle de la carte(type) comme expliqué la haut; mais je crois qu'on pourrait tout simplement mettre 5 as rechargement et ainsi de suite !?

    Le but étant , d'avoir une requête : solde par client trié par date : genre tous les soldes des clients du 01/04/2014 au 14/04/2014 ; donc ce que je veux c'est les colonnes suivantes : Nom(client) , Prénom(client), rechargement ht, consommation ht, décréditation ht , solde Ht, date début , date fin
    Le solde = rechargement-consommation-décréditation , la consommation pourrait être = 0, la décréditation aussi; On ne veut pas que les client dont le rechargement = 0 soit affiché;

    J'ai été trop longue , je m'en excuse ; j'espère que c'est plus claire maintenant !
    Est ce que vous pourriez m'aider ?

  6. #6
    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,

    Vous pouvez faire dans ce gout là, sans doute à adapter :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    SELECT
         C.nom,
        C.prenom,
        SUM(
            CASE T.IdTypeTransaction 
                WHEN 5 THEN T.Montant
                ELSE 0 
            END
        ) AS Rechargement,
        SUM(
            CASE T.IdTypeTransaction 
                WHEN 11 THEN T.Montant
                ELSE 0 
            END
        ) AS Consommation,
        SUM(
            CASE T.IdTypeTransaction 
                WHEN 21 THEN T.Montant
                ELSE 0 
            END
        ) AS Decreditation,
       SUM(
            CASE T.IdTypeTransaction 
                WHEN 5 THEN T.Montant
                WHEN 11 THEN - T.Montant
                WHEN 21 THEN - T.Montant
                ELSE 0 
            END
        ) AS Solde,
        MIN(DateTransaction) AS Debut,
        MAX(DateTransaction) AS Fin
    FROM Client C
    INNER JOIN Transaction T
        ON T.idclient = C.idclient
    WHERE T.DateTransaction BETWEEN '2014-04-01' AND '2014-04-14'
    GROUP BY 
         C.nom,
        C.prenom
    Par contre, pouvez vous détailler ceci :
    On ne veut pas que les client dont le rechargement = 0 soit affiché;
    Voulez-vous ne prendre en compte que les clients ayant au moins un rechargement sur la période concernée ?

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonsoir ,

    je vous remercie pour votre réponse rapide , en fait je viens d'utiliser la requête que vous m'avez donné ; j'ai comme message erreur : on me dit que j'ai une erreur de syntaxe au niveau de from : C Client inner join t transaction on ......!!!??? Est ce que c'est normal !

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    C'est peut-être normal dans la mesure où MySQL est sensible à la casse sur les noms de bases/tables/champs ce qui fait que la table Client et la table client ne sont donc pas les mêmes. A toi de modifier la requête de aieeeuuuuu en conséquence.

Discussions similaires

  1. [MySQL] insertion dans deux tables avec une clé étrangère
    Par reseau.reseau dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 23/03/2014, 13h04
  2. Lier deux tables avec une clé étrangère
    Par Ruy Blas dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/06/2013, 08h48
  3. Réponses: 1
    Dernier message: 11/06/2009, 23h39
  4. Réponses: 1
    Dernier message: 20/02/2008, 11h34
  5. lier deux table avec un formulaire
    Par timal78 dans le forum IHM
    Réponses: 1
    Dernier message: 28/01/2008, 10h59

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