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 :

Récupérer la descr de la 1ère table si inexistant dans 2ème


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut Récupérer la descr de la 1ère table si inexistant dans 2ème
    Bonjour,

    Voilà un nouveau problème que je vous soumets à vous, chers spécialiste MySql pour m'aider moi, novice MySql ;-)

    Soit une table contenant des codes et des descriptions :

    id_code - description
    S01 Code remise 1
    S02 Code remise 2

    Une deuxième table ou l'on peut introduire des descriptions différentes en fonction des langues

    idcode(t1) - id_lang - description
    S01 - 1 - Code remise 1
    S01 - 2 - Discount code 1
    S01 - 3 - Korting code 1
    S02 - 1 - Code remise 2
    S02 - 1 - Discount code 2
    S02 - 1 - Korting code 2

    Actuellement ma requête parcours immédiatement la table 2 avec un paramètre pour le code et un pour la langue (de l'utilisateur) et ma description est retournée....

    Imaginez mon nouvel employé Germanophone (quelle idée me direz vous )

    Je voudrais que ma requête me retourne la description de la table 1 (description par défaut) si elle n'est pas trouvé la table 2

    Est-ce possible en une seule requête ?????

    Merci d'avance

    Fred

  2. #2
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Bonjour,

    Heu question bête : pourquoi une telle redondance entre la table 1 et la table 2 :

    Avec une seule table ça me paraitrait beaucoup plus simple...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut
    La question n'est pas bête....je me la pose aussi d'ailleur parfois lol

    Plus sérieusement, on désire gardé la même logique avec toutes nos tables et les descriptions multi-langues quand il y en a.
    Ainsi, on désire garder dans tous nos fichiers une unicité (clé unique). En ajoutant la langue, chaque accès à un code demandera un paramètre de langue.... et l'on peut conservé l'intégrité référentielle entre un fichier et un code....sans s'occuper de sa description

    Il s'agit d'une décision de 'data design' prise en interne !

    Merci de l'interêt porté à la question

    Fred

  4. #4
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Je ne vois toujours pas l'intérêt d'une telle dénormalisation mais bon, admettons...

    En une seule requête sur les 2 tables, ça ne me parait pas possible. Par contre en se basant uniquement sur la table 2, on pourrait faire quelque chose de ce genre (S01 étant le code voulu, 1 la langue voulue et 2 la langue de remplacement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT description FROM table2 
    WHERE idcode = 'S01'
    AND IF ((SELECT idcode FROM description WHERE idcode = 'S01' AND id_lang = 1) IS NULL, id_lang = 2, id_lang = 1)
    En moins compliqué et compatible avec MySQL < 4.1, on peut aussi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT description FROM table2 
    WHERE idcode = 'S01'
    AND id_lang = 1 OR id_lang = 2
    Et au niveau applicatif ne récupérer que la première ligne renvoyée.

  5. #5
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Citation Envoyé par Maximilian
    Et au niveau applicatif ne récupérer que la première ligne renvoyée.
    Pas au niveau applicatif: directement au niveau MySQL en terminant la requête par:
    Comme ça, MySQL s'arrête au premier enregistrement, au lieu de lire toute la table.

    (c.f. http://dev.mysql.com/doc/refman/5.0/...imization.html)
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  6. #6
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Citation Envoyé par pcaboche
    au lieu de lire toute la table.
    Oui, enfin ça c'est s'il n'y a pas d'index sur idcode

    Sinon tu as raison le LIMIT est plus pratique.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Par défaut
    Merci beaucoup pour ses infos....

    A bientot

    Fred

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

Discussions similaires

  1. [VB6 - Access]Récupérer description des champs d'une table
    Par New dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/11/2014, 14h53
  2. Réponses: 1
    Dernier message: 29/07/2013, 14h33
  3. récupérer table et user dans une fonction
    Par papy_tergnier dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 15/12/2005, 11h38
  4. récupérer la clef primaire d'une table
    Par orionis69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/02/2004, 13h00
  5. Requete select pour récupérer les no match entre 2 tables
    Par Celina dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/12/2003, 11h59

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