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 :

Aide pour requête MySQL


Sujet :

Requêtes MySQL

  1. #1
    Invité
    Invité(e)
    Par défaut Aide pour requête MySQL
    Hello, hello,
    Après avoir cherché pendant des heures, je viens solliciter vodre aide
    Question pour les Pro de MySQL.

    J'ai plusieurs tables d'utilisateurs avec des champs différents dans le genre:
    Table 1 => ID (PRIMARY KEY) | SITEWEB | Pseudo | EMAIL | PRENOM | Code postal | DATA_1
    Table 2 => ID (PRIMARY KEY) | SITEWEB | TELEPHONE | EMAIL | PRENOM | Code postal | DATA_2 | DATA_3
    Table 3 => ID (PRIMARY KEY) | SITEWEB | SEXE | EMAIL | NOM | ADRESSE | VILLE | DATA_4 | DATA_6 | DATA_7
    Etc...

    Le but c'est de créer une table unique qui reprend l'ensemble des noms de champs avec les datas qui vont dedans par rapport à l'adresse mail...

    Si je n'ai pas été assez clair, La solution par rapport à mon exemple ci-dessus serait
    ID (PRIMARY KEY) | ID | SITEWEB | Pseudo | ***EMAIL*** | SEXE | NOM | PRENOM | ADRESSE | Code postal | DATA_1 | DATA_2 | DATA_3 | DATA_4 | DATA_6 | DATA_7

    Merci par avance !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Il manque quelques règles pour identifier les données à retourner.
    Si Email est bien la clé qui doit servir au "regroupement" de ces tables, que devrait-on retourner dans les colonnes SITEWEB, Prenom, Code Postal si ces valeurs sont différentes pour un même email ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Excellente question al1_24, je ne me l'étais pas posé...
    J'ai également des champs date et datetime, je me dis que je voudrais intégrer les infos les plus récentes ou les stocker dans une autre tables afin de les traiter differement.
    Si tu as une idée ou des conseils je suis preneur.
    Merci par avance,

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 917
    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 917
    Par défaut
    Salut weeza9.

    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
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    --------------
    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 `tab1`
    --------------
     
    --------------
    CREATE TABLE `tab1`
    ( `id`           integer  unsigned  not null auto_increment primary key,
      `siteweb`      varchar(255)       not null,
      `pseudo`       varchar(255)       not null,
      `email`        varchar(255)       not null,
      `prenom`       varchar(255)       not null,
      `code_postal`  varchar(255)       not null,
      `data_1`       varchar(255)       not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `tab1` (`siteweb`,`pseudo`,`email`,`prenom`,`code_postal`,`data_1`) values
      ('site 1','pseudo 1','email 1','prenom 1','postal 1','donnée 1/1'),
      ('site 2','pseudo 2','email 2','prenom 2','postal 2','donnée 1/2'),
      ('site 3','pseudo 3','email 3','prenom 3','postal 3','donnée 1/3')
    --------------
     
    --------------
    select * from `tab1`
    --------------
     
    +----+---------+----------+---------+----------+-------------+------------+
    | id | siteweb | pseudo   | email   | prenom   | code_postal | data_1     |
    +----+---------+----------+---------+----------+-------------+------------+
    |  1 | site 1  | pseudo 1 | email 1 | prenom 1 | postal 1    | donnée 1/1 |
    |  2 | site 2  | pseudo 2 | email 2 | prenom 2 | postal 2    | donnée 1/2 |
    |  3 | site 3  | pseudo 3 | email 3 | prenom 3 | postal 3    | donnée 1/3 |
    +----+---------+----------+---------+----------+-------------+------------+
    --------------
    DROP TABLE IF EXISTS `tab2`
    --------------
     
    --------------
    CREATE TABLE `tab2`
    ( `id`           integer  unsigned  not null auto_increment primary key,
      `siteweb`      varchar(255)       not null,
      `telephone`    varchar(255)       not null,
      `email`        varchar(255)       not null,
      `prenom`       varchar(255)       not null,
      `code_postal`  varchar(255)       not null,
      `data_2`       varchar(255)       not null,
      `data_3`       varchar(255)       not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `tab2` (`siteweb`,`telephone`,`email`,`prenom`,`code_postal`,`data_2`,`data_3`) values
      ('site 1','telephone 1','email 1','prenom 1','postal 1','donnée 2/1','donnée 3/1'),
      ('site 2','telephone 2','email 2','prenom 2','postal 2','donnée 2/2','donnée 3/1'),
      ('site 3','telephone 3','email 3','prenom 3','postal 3','donnée 2/3','donnée 3/1')
    --------------
     
    --------------
    select * from `tab2`
    --------------
     
    +----+---------+-------------+---------+----------+-------------+------------+------------+
    | id | siteweb | telephone   | email   | prenom   | code_postal | data_2     | data_3     |
    +----+---------+-------------+---------+----------+-------------+------------+------------+
    |  1 | site 1  | telephone 1 | email 1 | prenom 1 | postal 1    | donnée 2/1 | donnée 3/1 |
    |  2 | site 2  | telephone 2 | email 2 | prenom 2 | postal 2    | donnée 2/2 | donnée 3/1 |
    |  3 | site 3  | telephone 3 | email 3 | prenom 3 | postal 3    | donnée 2/3 | donnée 3/1 |
    +----+---------+-------------+---------+----------+-------------+------------+------------+
    --------------
    DROP TABLE IF EXISTS `tab3`
    --------------
     
    --------------
    CREATE TABLE `tab3`
    ( `id`           integer  unsigned  not null auto_increment primary key,
      `siteweb`      varchar(255)       not null,
      `sexe`         varchar(255)       not null,
      `email`        varchar(255)       not null,
      `nom`          varchar(255)       not null,
      `adresse`      varchar(255)       not null,
      `ville`        varchar(255)       not null,
      `data_4`       varchar(255)       not null,
      `data_5`       varchar(255)       not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `tab3` (`siteweb`,`sexe`,`email`,`nom`,`adresse`,`ville`,`data_4`,`data_5`) values
      ('site 1','sexe 1','email 1','nom 1','adresse 1','ville 1', 'donnée 4/1', 'donnée 5/1'),
      ('site 2','sexe 2','email 2','nom 2','adresse 2','ville 2', 'donnée 4/2', 'donnée 5/1'),
      ('site 3','sexe 3','email 3','nom 3','adresse 3','ville 3', 'donnée 4/3', 'donnée 5/1')
    --------------
     
    --------------
    select * from `tab3`
    --------------
     
    +----+---------+--------+---------+-------+-----------+---------+------------+------------+
    | id | siteweb | sexe   | email   | nom   | adresse   | ville   | data_4     | data_5     |
    +----+---------+--------+---------+-------+-----------+---------+------------+------------+
    |  1 | site 1  | sexe 1 | email 1 | nom 1 | adresse 1 | ville 1 | donnée 4/1 | donnée 5/1 |
    |  2 | site 2  | sexe 2 | email 2 | nom 2 | adresse 2 | ville 2 | donnée 4/2 | donnée 5/1 |
    |  3 | site 3  | sexe 3 | email 3 | nom 3 | adresse 3 | ville 3 | donnée 4/3 | donnée 5/1 |
    +----+---------+--------+---------+-------+-----------+---------+------------+------------+
    --------------
    set sql_mode = ''
    --------------
     
    --------------
    select max(siteweb)     as siteweb,
           max(email)       as email,
           max(nom)         as nom,
           max(prenom)      as prenom,
           max(sexe)        as sexe,
           max(pseudo)      as pseudo,
           max(code_postal) as code_postal,
           max(telephone)   as telephone,
           max(adresse)     as adresse,
           max(ville)       as ville,
           max(data_1)      as data_1,
           max(data_2)      as data_2,
           max(data_3)      as data_3,
           max(data_4)      as data_4,
           max(data_5)      as data_5
    from (
     
          select  'tab1',
                  id,
                  siteweb,
                  email,
                  null as nom,
                  prenom,
                  null as sexe,
                  pseudo,
                  code_postal,
                  null as telephone,
                  null as adresse,
                  null as ville,
                  data_1,
                  null as data_2,
                  null as data_3,
                  null as data_4,
                  null as data_5
            from  tab1
    union select  'tab2',
                  id,
                  siteweb,
                  email,
                  null as nom,
                  prenom,
                  null as sexe,
                  null as pseudo,
                  code_postal,
                  telephone,
                  null as adresse,
                  null as ville,
                  null as data_1,
                  data_2,
                  data_3,
                  null as data_4,
                  null as data_5
            from  tab2
    union select  'tab3',
                  id,
                  siteweb,
                  email,
                  nom,
                  null as prenom,
                  sexe,
                  null as pseudo,
                  null as code_postal,
                  null as telephone,
                  adresse,
                  ville,
                  null as data_1,
                  null as data_2,
                  null as data_3,
                  data_4,
                  data_5
            from  tab3) as x
     
    group by siteweb, email
    order by siteweb, email
    --------------
     
    +---------+---------+-------+----------+--------+----------+-------------+-------------+-----------+---------+------------+------------+------------+------------+------------+
    | siteweb | email   | nom   | prenom   | sexe   | pseudo   | code_postal | telephone   | adresse   | ville   | data_1     | data_2     | data_3     | data_4     | data_5     |
    +---------+---------+-------+----------+--------+----------+-------------+-------------+-----------+---------+------------+------------+------------+------------+------------+
    | site 1  | email 1 | nom 1 | prenom 1 | sexe 1 | pseudo 1 | postal 1    | telephone 1 | adresse 1 | ville 1 | donnée 1/1 | donnée 2/1 | donnée 3/1 | donnée 4/1 | donnée 5/1 |
    | site 2  | email 2 | nom 2 | prenom 2 | sexe 2 | pseudo 2 | postal 2    | telephone 2 | adresse 2 | ville 2 | donnée 1/2 | donnée 2/2 | donnée 3/1 | donnée 4/2 | donnée 5/1 |
    | site 3  | email 3 | nom 3 | prenom 3 | sexe 3 | pseudo 3 | postal 3    | telephone 3 | adresse 3 | ville 3 | donnée 1/3 | donnée 2/3 | donnée 3/1 | donnée 4/3 | donnée 5/1 |
    +---------+---------+-------+----------+--------+----------+-------------+-------------+-----------+---------+------------+------------+------------+------------+------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    Vous pouvez débuter avec cette exemple pour construire votre table de fusion.
    Je suis partie sur l'hypothèse que les valeurs dans une colonne, par exemple prénom, sont identiques pour le couple (siteweb, email).
    Si ce n'est pas le cas, alors vous devrez faire un choix sur l'une de ces valeurs.

    @+

  5. #5
    Membre averti
    Homme Profil pro
    développeur web amateur
    Inscrit en
    Janvier 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2018
    Messages : 40
    Par défaut transaction implicite
    Citation Envoyé par Artemus24 Voir le message
    Salut weeza9.

    [code]--------------
    SET AUTOCOMMIT = 0
    --------------

    --------------
    START TRANSACTION
    --------------
    Bonjour Artemus,

    Je croyais qu'un 'SET AUTOCOMMIT = 0;' était équivalent à un START TRANSACTION ? (du moins cela marche de la mm façon dans ma base)

    à te lire
    Cordialement
    Roland

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 917
    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 917
    Par défaut
    Salut RolandGautier.

    Le autocommit indique comment se font les transactions.
    Si j'indique "1", cela signifie que la transaction est automatiquement validée.
    Si j'indique "0", c'est à moi de gérer cela soit par un "commit" (validation) soit par un "rollback" (rejet).

    Le "start transaction", c'est pour indiquer le début de transaction.
    En fait, il ignore la valeur du autocommit, jusqu'à la fin de la transaction, qui se fait par un "commit" ou un rollback".
    Après cela, la valeur par défaut de l'autocommit est à nouveau activée.

    Normalement, après chaque commit (ou rollback), je devrais faire un nouveau "start transaction".

    Donc si je ne précise pas à chaque fois le "start transaction", la valeur par défaut sera en fait celle de l'autocommit.
    De ce fait, si je mets "autocommit = 0", je sais que c'est moi qui doit gérer la transaction par un "commit" ou un "rollback", même si je ne précise pas à chaque fois le "start transaction".

    Donc non, ce n'est pas exactement équivalent.

    @+

  7. #7
    Membre averti
    Homme Profil pro
    développeur web amateur
    Inscrit en
    Janvier 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2018
    Messages : 40
    Par défaut autocommit vs transaction
    Merci pour ces précisions.
    Roland

Discussions similaires

  1. [MySQL]Aide pour requête simple
    Par Pill_S dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2007, 10h40
  2. [SQL] Aide pour requête
    Par portu dans le forum Access
    Réponses: 8
    Dernier message: 23/09/2005, 13h05
  3. Aide pour requête de Tri assez spécial (Oracle)
    Par Chips dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/04/2005, 10h56
  4. [sqlbaseserver]demande de conseils/aides pour requêtes
    Par GéniuS77 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 18/03/2004, 17h27
  5. Aide pour Requête
    Par Guiche dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/11/2003, 20h18

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