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 :

Concaténation de 2 champs de 2 tables [MySQL-5.1]


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Concaténation de 2 champs de 2 tables
    Bonsoir à tous,
    J'ai besoin de votre aide précieuse pour concaténer 2 champs.
    J'ai 2 tables : "product_lang" et "product" avec 1 identifiant commun "id_product"
    Dans la table "product_lang" il y a un champ "name" dans lequel je souhaite rajouter la référence du produit qui se trouve dans la table "product"
    Je souhaite que l'enregistrement final est la forme "reference - Nom du produit" (avec les espaces et le tiret en les 2 données)
    Les 2 tables ont pour identifiant commun "id_product"
    Je vous remercie par avance pour votre aide.
    Jean-Christophe

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Pourquoi vouloir dénormaliser une table alors que ce résultat s'obtient aisément avec une jointure ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour
    Je ne souhaite absolument pas denormaliser la base je souhaite simplement rajouter une information dans un champ automatiquement plus tôt que de le faire manuellement article par article

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Et bien, dupliquer une information dans deux tables d'une même base de données c'est introduire de la redondance et des risques de désynchronisation des tables, à terme.
    C'est donc bien dénormaliser la base de données.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour
    Si vous aviez pris le temps de lire correctement ma demande vous n'auriez jamais tenu c'est propos !
    Je souhaite simplement afficher la référence dans la désignation de l article, ni plus ni moins...
    Maintenant que vous ne souhaitiez pas maider ce n'est pas un problème je trouverais de toute manière la solution

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    pourtant c'est bien ce que vous demandez, ou alors vous vous exprimez mal.


    Bref pour votre demande regardez du côté de la clause UPDATE, mais je partage l'avis de Maljuna Kris c'est à proscrire.


    Si vous changez d'avis et partez simplement sur une règle d'affichage il faudra utiliser une jointure entre vos deux table : http://sqlpro.developpez.com/cours/sqlaz/jointures/
    et ensuite utilisez une fonction de concaténation pour obtenir le resultat souhaitez : http://dev.mysql.com/doc/refman/5.6/...unction_concat

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Dans ce cas je m'exprime vraiment très mal.
    Je ne veux absolument rien changé dans la structure des tables de la base.
    Je veux juste rajouter du texte supplémentaire dans le champ désignation du produit.

    Voici un exemple
    Avant : Couteau Atlantis
    Après : VI8070 - Couteau Atlantis

    C'est tout je ne transforme rien, je veux juste une chaine de caractère supplémentaire dans le titre.

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Vous rajoutez une 2eme informations dans une colonne.
    Vous cassez ainsi la 1ere forme normale, ce qui revient à dénormaliser votre schema actuel.

    Si vous faites ainsi, le jour où vous changez soit le nom soit la ref, il faudra impacter 2 colonnes.

    Bref tournez vous du coté de la clause UPDATE : http://sqlpro.developpez.com/cours/sqlaz/dml/#LIV

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

    C'est en effet de la dénormalisation, qui ici n'a vraiment pas lieu d'être, et vous causera bien du souci lors des mises à jour ultérieures comme vous l'a fait remarquer punkoff

    Pourquoi ne pas simplement créer une vue pour regrouper ces informations, et utiliser la vue dans vos requêtes ?

  10. #10
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Citation Envoyé par jcmasse66 Voir le message
    J'ai besoin de votre aide précieuse pour concaténer 2 champs.
    J'ai 2 tables : "product_lang" et "product" avec 1 identifiant commun "id_product"
    Dans la table "product_lang" il y a un champ "name" dans lequel je souhaite rajouter la référence du produit qui se trouve dans la table "product"
    Je souhaite que l'enregistrement final est la forme "reference - Nom du produit" (avec les espaces et le tiret en les 2 données)
    Si c'est juste pour un affichage, voici la requête à faire.
    En supposant que le champ référence s'appelle reference

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CONCAT(r.reference, " - ", n.name) mytitle
    FROM product r
    INNER JOIN product_lang n ON n.id_product = r.id_product

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Je vous remercie très sincèrement pour votre aide, par contre ce n'est pas de l'affichage que je souhaite c'est vraiment une modification d'un champ.
    J'ai essayé cette requete mais j'ai un message d'erreur SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE product_lang 
        SET name = (
           SELECT id_product CONCAT (product.reference, "-", product_lang.name) 
           FROM product_lang, product 
           WHERE product_lang.id_product = product.id_product
    );
    Cordialement
    Jean-Christophe

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    dans la clause select, id_product est en trop.

    essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE product_lang SET name = (SELECT CONCAT (product.reference, "-", product_lang.name) 
    FROM product WHERE product_lang.id_product = product.id_product)
    where exists (select 1 from product WHERE product_lang.id_product = product.id_product)

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour votre aide, j'ai obtenu le résultat que je souhaitais.

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

Discussions similaires

  1. [AC-2007] Concaténer plusieurs champs d'une table dans une requête avec format date
    Par MelaAllIn dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 25/08/2011, 10h05
  2. Réponses: 6
    Dernier message: 09/08/2010, 19h52
  3. [MySQL] concaténation plusieurs données même champs d'une table MYSQL
    Par creative69 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/07/2008, 17h58
  4. Concaténation de 2 champs de 2 tables différentes
    Par Chauveau dans le forum Access
    Réponses: 1
    Dernier message: 06/04/2007, 23h36
  5. [Requête]Concaténation de 3 champs dans une table
    Par egg3774 dans le forum Access
    Réponses: 10
    Dernier message: 21/03/2007, 13h09

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