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 :

Remplir une table a partir d'une autre en cochant une case


Sujet :

MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Remplir une table a partir d'une autre en cochant une case
    Bonjour,

    très novice en mysql pour commencé, j'ai quand même réussi a créer une table, que je rempli a l'aide d'une appli sur mon site web (fabrik pour ceux qui connaissent, et qui marche du tonnerre entre autre), mais ma question est que je voudrais remplir une autre table en cochant une case ou autre, car le remplissage de la seconde table n'est qu'occasionnel et sur un besoin bien precis.

    J'espère avoir été assez clair, et est ce que c'est possible

    merci a tous 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 959
    Points
    18 959
    Par défaut
    Salut cris.tel.

    Citation Envoyé par cris.tem
    je voudrais remplir une autre table en cochant une case ou autre, car le remplissage de la seconde table n'est qu'occasionnel et sur un besoin bien précis.
    Une table se remplit soit par une saisie au clavier, soit par recopie d'un fichier.
    Qu'est-ce que vous entendez par "cocher une case" ?
    Ou plus précisément, que désirez-vous faire à partir de quoi et pour obtenir quel résultat ?
    Détaillez ce que vous désirez faire soit par un jeu d'essai ou avec quelques explications.

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

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Déjà merci pour votre intervention rapide

    donc je vais essayer de m'expliquer plus clairement.

    j'ai une base avec 2 tables identiques mais des noms différents, et je voudrais quand je rempli la 1ere table en cochant une case par exemple, que ça copie les informations de la 1ere dans la 2eme table automatiquement. j'ai besoin de choisir quand je copie dans la 2eme table.

    pour résumer: sur ma 1ere table j'ai des infos de joueur, et quand je cocherais cette case cela recopierais automatiquement dans ma 2eme table les informations de ce joueur pour mon équipe. c'est pour ça que je dis la recopie est qu'occasionnel.

    merci par avance

  4. #4
    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 959
    Points
    18 959
    Par défaut
    Salut cris.tel.

    Et comment se concrétise cette case ?
    Est-ce une colonne de votre première table, de type boolean où vous avez mis TRUE si elle est coché, et FALSE autrement ?
    Si l'information (la case cochée) est présente dans la table, c'est facile à faire.
    Voici un exemple de recopie :
    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
     
    --------------
    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 `tabone`
    --------------
     
    --------------
    CREATE TABLE `tabone`
    ( `id`    integer unsigned NOT NULL auto_increment primary key,
      `test`  boolean          NOT NULL,
      `col1`  varchar(255)     NOT NULL,
      `col2`  integer unsigned NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `tabone` (`test`,`col1`,`col2`) values
      (true,  'ca marche',   25),
      (false, 'pas là',      77),
      (true,  'et la aussi', 32)
    --------------
     
    --------------
    select * from tabone
    --------------
     
    +----+------+-------------+------+
    | id | test | col1        | col2 |
    +----+------+-------------+------+
    |  1 |    1 | ca marche   |   25 |
    |  2 |    0 | pas là      |   77 |
    |  3 |    1 | et la aussi |   32 |
    +----+------+-------------+------+
    --------------
    DROP TABLE IF EXISTS `tabtwo`
    --------------
     
    --------------
    CREATE TABLE `tabtwo`
    ( `id`    integer unsigned NOT NULL auto_increment primary key,
      `colA`  varchar(255)     NOT NULL,
      `colB`  integer unsigned NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `tabtwo` (`id`,`colA`,`colB`) values
      (3, 'ancienne valeur', 28)
    --------------
     
    --------------
    select * from tabtwo
    --------------
     
    +----+-----------------+------+
    | id | colA            | colB |
    +----+-----------------+------+
    |  3 | ancienne valeur |   28 |
    +----+-----------------+------+
    --------------
    insert into `tabtwo` (`id`,`colA`,`colB`)
      select  id, col1 as colA, col2 as colB
        from  `tabone`
       where  test=true
       on duplicate key update colA = col1, colB = col2
    --------------
     
    --------------
    select * from tabtwo
    --------------
     
    +----+-------------+------+
    | id | colA        | colB |
    +----+-------------+------+
    |  1 | ca marche   |   25 |
    |  3 | et la aussi |   32 |
    +----+-------------+------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    Il existe d'autre solution en fonction de ce que vous voulez faire.
    La recopie que je donne, c'est à vous de la gérer.
    Mais par un déclencheur, sur le même principe, on peut faire aussi une recopie.

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

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Salut Aremus24

    pour l'instant je n'ai rien fait, c'est une table classique avec 5 colonnes pour ma 1ere table, et je voudrais prendre juste les info de les 2 premières colonnes pour les inclure dans la 2eme table qui a les colonnes identiques à la 1ere.

    Je vais essayer de vous faire une copie de mes tables pour que vous puissiez mieux comprendre, mais comme je vous les dit je suis novice et ne connaît rien de particulier au language mysql et ne connaît pas non plus les fonctions, mais ne demande qu'a apprendre.

    enfin dite moi si vous voulez que je fasse une capture de mes tables.

    Mais au vu de votre réponse, je pense que c'est un peu plus compliqué que je ne le croyais et je ne suis pas sur de pouvoir le faire.

    Mais je vais essayer quand même de comprendre.

    merci encore

  6. #6
    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 959
    Points
    18 959
    Par défaut
    Salut cris.tel.

    Ce n'est pas très compliquer à faire.
    Nous sommes dans un forum de discussion et donc posez toutes les questions que vous voulez afin de mieux comprendre votre problématique.

    Dans mon exemple, j'ai mis des tas de choses pour illustrer le résultat que vous attendez. La requête que vous attendez est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    insert into `tabtwo` (`id`,`colA`,`colB`)
      select  id, col1 as colA, col2 as colB
        from  `tabone`
       where  test=true
       on duplicate key update colA = col1, colB = col2;
    La colonne test sert à dire oui (true), je veux recopier cette ligne ou non (false) je ne veux pas le faire, dans votre seconde table.
    On insère dans la seconde table "tabtwo", les colonnes col1 et col2 de la table "tabone" que si la colonne "test" faisant office de case cochée à oui, est à vrai.

    Si la ligne n'existe pas, elle est insérée, si par contre elle existe déjà, elle sera mis à jour.
    Dans le cas où test est à FALSE, il n'y a aucune action.

    Si vous désirez procéder de la même façon mais que pour une seule insertion à la fois, il suffit de faire cet insert que si votre case cochée est à vrai.
    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
    118
    119
    120
    121
    --------------
    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 `tabone`
    --------------
     
    --------------
    CREATE TABLE `tabone`
    ( `id`    integer unsigned NOT NULL auto_increment primary key,
      `col1`  varchar(255)     NOT NULL,
      `col2`  integer unsigned NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
      AUTO_INCREMENT=3
    --------------
     
    --------------
    DROP TABLE IF EXISTS `tabtwo`
    --------------
     
    --------------
    CREATE TABLE `tabtwo`
    ( `id`    integer unsigned NOT NULL auto_increment primary key,
      `colA`  varchar(255)     NOT NULL,
      `colB`  integer unsigned NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `tabtwo` (`colA`,`colB`)  values
      ('valeur pour id=1', 28),
      ('valeur pour id=2', 33),
      ('valeur pour id=3', 45)
    --------------
     
    --------------
    select * from tabtwo
    --------------
     
    +----+------------------+------+
    | id | colA             | colB |
    +----+------------------+------+
    |  1 | valeur pour id=1 |   28 |
    |  2 | valeur pour id=2 |   33 |
    |  3 | valeur pour id=3 |   45 |
    +----+------------------+------+
    --------------
    insert into `tabone` (`col1`,`col2`) values ('on insère cette ligne', 12)
    --------------
     
    --------------
    commit
    --------------
     
    --------------
    set @id = last_insert_id()
    --------------
     
    --------------
    select @id as 'identifiant'
    --------------
     
    +-------------+
    | identifiant |
    +-------------+
    |           3 |
    +-------------+
    --------------
    select * from tabone
    --------------
     
    +----+-----------------------+------+
    | id | col1                  | col2 |
    +----+-----------------------+------+
    |  3 | on insère cette ligne |   12 |
    +----+-----------------------+------+
    --------------
    insert into `tabtwo` (`id`,`colA`,`colB`)
      select  id, col1 as colA, col2 as colB  from  `tabone`  where  id=@id
          on  duplicate key update colA = col1, colB = col2
    --------------
     
    --------------
    select * from tabtwo
    --------------
     
    +----+-----------------------+------+
    | id | colA                  | colB |
    +----+-----------------------+------+
    |  1 | valeur pour id=1      |   28 |
    |  2 | valeur pour id=2      |   33 |
    |  3 | on insère cette ligne |   12 |
    +----+-----------------------+------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    Citation Envoyé par cris.tel
    Je vais essayer de vous faire une copie de mes tables pour que vous puissiez mieux comprendre,
    Je veux bien ! Le mieux serait de faire un export par phpmyadmin de votre base de données.
    Donnez juste un extrait, pas la totalité de votre jeu d'essai.

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

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci de votre compréhension

    je pense avoir saisi la logique de votre code et je pense que ça devrait collé, si je peux me permettre l'expression

    Dans un 1er temps je vous joint une parti de mon export de ma base (j'espère que vous allez pouvoir l'ouvrir) de toute façon rien de top secret ni confidentiel.

    et deuxièmement le code que vous fournissez ou est ce que je dois le recopier, j'ai une vague idée, mais je préfère avoir votre confirmation avant..

    Effectivement je pense que vous avez bien cerné ma demande le fait de cocher une case pour valider la recopie de tel et tel colonne dans la table 2.

    u398468851_id.ods

    merci encore de votre aide

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

    Quel est l’intérêt de cela ?

    Par nature, on évite de dupliquer des données, on ne stocke chaque données qu'une seule fois.
    Donc, à moins de besoin particulier (historisation ?) je pense que vous partez sur la mauvaise voie, avec une modélisation bancale qui ne vous apportera par la suite que des soucis : requêtes compliquées, difficulté de mise à jour...

  9. #9
    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 959
    Points
    18 959
    Par défaut
    Bonjour cris.tel.

    Pourquoi avoir mis ce export au format XML ? Au format TEXT, cela aurait été tout aussi bien, voire lisible.
    Quels sont les langues que vous utilisez dans ce jeu d'essai ? Du Russe ?

    Pour la suite, le mieux est de vous adresser au forum HTML, CSS et PHP.
    Pourquoi ? Car ce forum est consacré qu'à MySql.

    Voici comment procéder : Pour votre case à cocher, cela se fait par un formulaire.
    Après la saisie de votre ligne dans le formulaire, vous cochez ou pas la case et vous validez le formulaire.
    Celui-ci sera envoyez vers le serveur, et en php, vous allez traiter les variables de votre formulaire.

    Vous appliquez la seconde solution (post #6) que je vous ai indiqué :
    --> insertion de la ligne dans la première table.
    --> récupération de l'identifiant par "last_insert_id()".
    --> si la case a été coché, vous appliquez la requête du second exemple afin de recopier dans votre seconde table.
    --> si la case n'est pas coché, vous ne faites rien.

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

  10. #10
    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 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Avant d'appliquer telle ou telle solution technique, il serait bon de répondre sur le fond, à savoir la question du post n° 8 de Aieeeuuuuu

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/08/2014, 14h00
  2. Réponses: 2
    Dernier message: 27/05/2014, 14h12
  3. remplir une table access à partir d'une autre table
    Par Nacera dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/12/2010, 16h14
  4. Réponses: 3
    Dernier message: 14/10/2010, 17h29
  5. Update d'une table a partir d'une autre table
    Par Yannis06 dans le forum Oracle
    Réponses: 6
    Dernier message: 11/08/2005, 12h32

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