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 :

Relation entre 2 tables


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 176
    Points : 90
    Points
    90
    Par défaut Relation entre 2 tables
    Bonjour,

    J'ai 2 tables : une table clients et une paramètres dans laquelle on saisit les paramètres liés à l'activité du client.
    Si c'est possible, j'aimerais pouvoir dans la liste des clients, supprimer la fiche client ainsi que la fiche paramètres liée.
    Dois-je mettre une id_parametres dans la fiche client ou une id_client dans la fiche paramètres et après faire une liaison dans ma requête.
    Je vous remercie de votre aide.

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut
    Salut barale61.

    Vous nous parlez de votre problème comme si nous savions de quoi il s'agissait.

    Pour comprendre ce que vous essayez de faire, il nous faut :

    1) le DLL de vos deux tables "clients" et "paramètres".

    2) un jeu d'essai représentatif de votre problème.

    3) le résultat que vous désirez obtenir, à partir, bien sûr, de ce jeu d'essai.

    4) les tentatives infructueuses de ce que vous avez essayé de faire.

    Merci.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 387
    Points
    38 387
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il vous suffit de poser une contrainte en fonction des cardinalités entre client et paramètre

    Si par exemple, un client possède 0 à n paramètres, et qu'un paramètre ne concerne qu'un et un seul client
    alors vous aurez dans la table paramètre une clef étrangère pointant sur la clef primaire de la table client

    En ce cas, il vous suffit d'ajouter une contrainte sur la table comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CONSTRAINT FK_PARAM_VERS_CLIENT
     FOREIGN KEY (ID_CLIENT)              
     REFERENCES TB_CLIENT(ID_CLIENT)           
     ON DELETE CASCADE
    Dans mon exemple :
    FK_PARAM_VERS_CLIENT est un nom libre utilisé pour nommer la contrainte
    FOREIGN KEY (ID_CLIENT) est le nom de la colonne FK dans la table paramètre
    REFERENCES TB_CLIENT(ID_CLIENT) et le nom de la table (TB_CLIENT) dans laquelle la colonne est clef primaire, et le nom de cette colonne PK (ID_CLIENT) qui peut être différent dans les 2 tables
    ON DELETE CASCADE est la clause qui permet de supprimer automatiquement les occurrences dans la table PARAMETRES des que le client est supprimé dans la table CLIENT

  4. #4
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 176
    Points : 90
    Points
    90
    Par défaut Relation entre 2 tables
    Merci d'avoir pris du temps pour me répondre. Comme la dénomination dans la fiche paramètres était extraite de la table client, j'ai fini par mettre dans ma clause WHERE la dénomination:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Pour supprimer la fiche client
                $id= $_GET['id'];
                $req = $bdd->exec("DELETE FROM fiche_client WHERE id = ".$id."");
    //Pour supprimer la fiche paramètres
                $denomination= $_GET['denomination'];
                $req = $bdd->exec("DELETE FROM parametres WHERE denomination = '$denomination'")or die('erreur de sql<br>'.mysql_error());
    Quand j'aurais un moment, je ferais le cours sur MySql.

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut
    Salut barale61.

    Je crois que vous n'avez rien compris au message de Escartefigue.

    Admettons que la table client soit une entité mère et que la table paramètre soit une entité fille.
    Pour un client donné, vous pouvez avoir de 0 à N paramètres. Cela va se traduire par une clef étrangère (foreign key).
    Dans la clef étrangère, vous pouvez indiquer comment vont se faire les delete et les update.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT `FK_CLIENT` FOREIGN KEY (`id_client`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    Le terme "DELETE CASCADE" indique que si vous supprimez une ligne de la table mère (client), cette suppression sera répercutée dans la table fille (paramètre).

    Cette exemple va illustrer votre demande :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `client`
    --------------
     
    --------------
    CREATE TABLE `client`
    ( `id`     integer unsigned NOT NULL auto_increment primary key,
      `nom`    varchar(255)     NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `client` (`nom`) values
      ('albert'),('françois'),('marcel')
    --------------
     
    --------------
    select * from client
    --------------
     
    +----+----------+
    | id | nom      |
    +----+----------+
    |  1 | albert   |
    |  2 | françois |
    |  3 | marcel   |
    +----+----------+
    --------------
    DROP TABLE IF EXISTS `parametre`
    --------------
     
    --------------
    CREATE TABLE `parametre`
    ( `id`         integer unsigned NOT NULL auto_increment primary key,
      `id_client`  integer unsigned NOT NULL,
      `valeur`     varchar(255)     NOT NULL,
      CONSTRAINT `FK_CLIENT` FOREIGN KEY (`id_client`) REFERENCES `client` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `parametre` (`id_client`,`valeur`) values
      (1, 'param albert A'),  (1,'param albert B'),
      (2, 'param françois A'),(2,'param françois B'),(2,'param françois C'),
      (3, 'param marcel A')
    --------------
     
    --------------
    select * from parametre
    --------------
     
    +----+-----------+------------------+
    | id | id_client | valeur           |
    +----+-----------+------------------+
    |  1 |         1 | param albert A   |
    |  2 |         1 | param albert B   |
    |  3 |         2 | param françois A |
    |  4 |         2 | param françois B |
    |  5 |         2 | param françois C |
    |  6 |         3 | param marcel A   |
    +----+-----------+------------------+
    --------------
    delete from `client` where id = 2
    --------------
     
    --------------
    select * from client
    --------------
     
    +----+--------+
    | id | nom    |
    +----+--------+
    |  1 | albert |
    |  3 | marcel |
    +----+--------+
    --------------
    select * from parametre
    --------------
     
    +----+-----------+----------------+
    | id | id_client | valeur         |
    +----+-----------+----------------+
    |  1 |         1 | param albert A |
    |  2 |         1 | param albert B |
    |  6 |         3 | param marcel A |
    +----+-----------+----------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    Je supprime la ligne "id=2" dans la table "client".
    On constate que les lignes de 3 à 5 ont été automatiquement supprimé dans la table "paramètre".
    Je suppose que cela doit correspondre à votre demande.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 176
    Points : 90
    Points
    90
    Par défaut Relation entre 2 tables
    Je comprends bien mieux de cette façon. Merci.

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

Discussions similaires

  1. Relation entre les tables
    Par mzt.insat dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/11/2005, 09h17
  2. [XSD] Relation entre deux tables
    Par fd59 dans le forum Valider
    Réponses: 2
    Dernier message: 10/09/2005, 00h33
  3. Relation entre les tables
    Par adelyx dans le forum Bases de données
    Réponses: 1
    Dernier message: 03/04/2005, 00h06
  4. Relation entre deux tables
    Par manel007 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/03/2005, 17h54
  5. [Relations] afficher les relations entre 2 tables
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 14/01/2004, 18h07

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