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 :

Fusion 2 tables avec champs différents et nombre lignes différentes


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 19
    Points
    19
    Par défaut Fusion 2 tables avec champs différents et nombre lignes différentes
    Salut tout le monde,

    Je me prends le chou sur un truc qui me paraît toujours simple à faire : regrouper deux tables en une seule avec certains champs différents et des nombres de lignes différents.

    Soit ma table A :
    id
    obs_date
    product_id

    Soit ma table B :
    id
    pay_date
    coupon
    product_id

    Je veux faire une table C ayant cette structure :
    id
    product_id
    obs_date
    pay_date
    coupon

    Sachant que la table B contient 270 lignes et la table A 90, il faudrait donc que dans la table C, j'ai par exemple pour le product_id 16, les lignes suivantes :

    1 16 NULL 2013-03-20 8.00
    2 16 NULL 2013-04-20 8.00
    3 16 2013-05-20 2013-05-25 0.00
    4 16 2013-06-20 2013-06-25 4.25
    5 16 2013-07-20 NULL NULL

    En fait, pour chaque product_id, il peut y avoir une "obs_date", mais pas de "pay_date", ni de "coupon" et inversement.

    J'ai essayé avec des jointures + GROUP BY, avec un UNION, mais je n'obtiens pas ce que je veux...

    Merci par avance pour votre aide

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    vu la présentation de tes tables, ce n'est pas une bonne idée de vouloir regrouper ça une seule table, au niveau de ton modèle de données...

    vu que tu as une ligne ou plus pour chaque colonne concernée pour un productid et que chacun de ces trucs ne sont pas dépendant, tu aurais forcément plusieurs ligne potentiellement avec cette sorte de compactage que tu veux faire...

    c'est vraiment une vraie fausse bonne idée...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 19
    Points
    19
    Par défaut
    Bonjour et merci pour ta réponse.

    Dans l'absolu, tu as raison, ce n'est peut-être pas une très bonne idée, malheureusement, je dois avoir cette nouvelle table qui contiendra les données des deux autres car le système pour entrer les dates d'observation et de paiement a changé...
    A compter de ce jour, les nouvelles dates insérées contiendront bien les 3 champs : obs_date, pay_date et coupon pour un même product_id, avec la possibilité de mettre à NULL l'un ou l'autre.
    Auparavant, on avait deux formulaires différents pour chacune des tables car dans la première hypothèse de mon client, ce n'était pas forcément lié. Mais il a changé d'avis et me dit que maintenant les choses devront être corrélées, par exemple un pay_date sera 21 jour plus tards que l'obs_date.
    Comme j'utilise un ORM pour mapper ces données dans mon framework, il est préférable d'avoir une seule table. Mais comme un certain nombre de lignes ont déjà été créées dans les deux tables précédentes, j'aimerais les récupérer dans la nouvelle pour éviter au client de toutes les ressaisir...

    Mais s'il n'y a vraiment aucun moyen de faire cela simplement en SQL, alors je trouverais une autre astuce...

  4. #4
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    si l'idée est simple...

    tu fais l'union de 2 requêtes:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    insert into c(product_id,obs_date,pay_date,coupon)
      (select b.product_id,a.obs_date,b.pay_date,b.coupon
      from b
      left join a on b.product_id=a.product_id)
      union
      (select a.product_id,a.obs_date,null,null
      from a
      where a.product_id not in (select b.product_id from b))
    la première va te compacter les lignes en commun mais engendrera des répétition dans les colonnes product_id et obs_date quand tu auras plusieurs lignes dans a ou b, ça tu n'y couperas pas...
    la seconde complètera par les valeurs de a et des null pour le reste pour les product_id juste présent dans a...

    ça c'est le mieux que l'on peut faire en sql pour ta table c de par ce que tu as dans tes tables...
    par contre comment ton orm va digérer ça.... c'est d'ailleurs la faiblesse des orm
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

Discussions similaires

  1. [AC-2007] ajout de deux tables avec champs différents
    Par cedric pouilly dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/04/2013, 18h49
  2. Fusionner deux tables avec champs différents
    Par CyberMen dans le forum Débutez
    Réponses: 6
    Dernier message: 22/08/2012, 18h32
  3. [Requête] regroupement de 2 tables avec champs différents
    Par egg3774 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/04/2007, 21h40
  4. fusion de table avec un champ en commun
    Par chamoix dans le forum Access
    Réponses: 3
    Dernier message: 13/12/2006, 23h18
  5. Réponses: 2
    Dernier message: 27/10/2005, 19h26

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