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 :

Retour de champs dans une sous-requête [MariaDB]


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut Retour de champs dans une sous-requête
    Bonjour,

    J'ai une table regroupant tous les noms de produits en français et en anglais, de la forme suivante (product_line_name_id, product_line_name, link_rewrite, lang_id), avec des enregistrements du type :

    id | product_line_name | link_rewrite | lang_id
    ------------------------------------------------------------------------
    1 | clé Allen 8 mm | cle-allen-8-mm | 1
    2 | 8 mm Allen wrench | 8-mm-allen-wrench | 2
    3 | tournevis cruciforme 6 mm | tournevis-cruciforme-6-mm | 1
    4 | 6 mm Phillips screwdriver | 6-mm-phillips-screwdriver | 2
    ....

    Le but de la requête est de ne sélectionner que le nom (product_line_name) et le lien (link_rewrite) en anglais (lang_id = 2) et d'y joindre le lien (link_rewrite) correspondant en français (lang_id = 1), uniquement sur les produits disposant des 2 traductions, de façon à obtenir ceci :

    name_en | slug_en | slug_fr
    ------------------------------------------------------------------------------------------------
    8 mm Allen wrench | 8-mm-allen-wrench | cle-allen-8-mm
    6 mm Phillips screwdriver | 6-mm-phillips-screwdriver | tournevis-cruciforme-6-mm


    J'ai tenté d'utiliser une sous-requête renvoyant une table mais je n'arrive pas à faire remonter la valeur du slug_fr depuis la sous-requête. Est-ce possible ?
    Y a t-il une alternative pour arriver à ce résultat ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT pln2.product_line_name as name_en, pln2.link_rewrite as slug_en, pln1.slug_fr
    FROM product_line_name pln2
    LEFT JOIN
    (SELECT pln.product_line_name_id as id1, pln.link_rewrite as slug_fr
    FROM product_line_name pln
    WHERE pln.lang_id = 1) pln1
    ON pln2.product_line_name_id = pln1.id1
    WHERE pln2.lang_id = 2
    Merci par avance de votre aide
    Vincent

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Hum, tu identifies les traductions, mais pas les produits.

    1 | clé Allen 8 mm    | cle-allen-8-mm    | 1
    2 | 8 mm Allen wrench | 8-mm-allen-wrench | 2
    Comment sais-tu ici qu'on parle du même produit ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut
    Autant pour moi, j'ai oublié d'indiquer que j'avais une clé étrangère (product_line_id) dans la table... Oups.
    Je peux donc bien associer les différentes produits avec les traductions respectives.

    Vincent

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Comme ceci :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select ANG.product_line_name
         , ANG.link_rewrite
         , FRA.link_rewrite
    from T1 as ANG
    inner join T1 as FRA
       on FRA.product_line_id=ANG.product_line_id
      and FRA.lang_id=1
    where ANG.lang_id=2

  5. #5
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut
    Bonjour Escartefigue,

    Effectivement, cela fonctionne. Merci.
    J'avais essayé avec une auto-jointure mais j'avais sans doute dû m'emmêler les requêtes... . Par décence (et surtout par respect pour mon amour propre) je vais garder ma tentative pour moi...

    Vincent

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

Discussions similaires

  1. Jointure sur champ multivalué dans une sous-requête
    Par Lari81 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/07/2018, 17h52
  2. Appeler le champ d'une sous-requête where dans un select
    Par purplebamboo dans le forum PL/SQL
    Réponses: 2
    Dernier message: 24/06/2013, 15h07
  3. Référence à un champ dans une sous-requête
    Par Gluckens dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/04/2009, 20h08
  4. Sélection de tous les champs d'une sous-Requête que je redéfini
    Par electrosat03 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/06/2007, 16h43
  5. Ramener plusieurs champs dans une sous requête...
    Par David.V dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/01/2005, 07h54

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