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

PHP & Base de données Discussion :

Requête à résultats conditionnels [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 33
    Par défaut Requête à résultats conditionnels
    Bonjour,

    Dans le cadre d'un site multilangues je souhaiterai que mes requêtes me retournes les champs de la langue par défaut lorsque la langue recherché n'est pas renseigné, je m'explique :

    Voici la structure sommaire de mes tables

    table contenu

    id
    publication

    table contenu_langue

    contenu_id
    code_langue
    texte

    Actuellement pour être sur que du texte sera affiché même si il n'est pas renseigné pour la langue en cour je fais ceci :

    SELECT * FROM contenu WHERE publication = 1

    et pour chaque ligne

    SELECT * FROM contenu_langue WHERE contenu_id = (id ligne) AND code_langue = "(langue en cour)"

    Si aucun résultat

    SELECT * FROM contenu_langue WHERE contenu_id = (id ligne) AND code_langue = "(langue par défaut)"

    Sachant que la langue par défaut est toujours renseigné.

    Ma question est donc : est-il possible d'obtenir ce résultat en une seule requête ? Du type :

    SELECT * FROM contenu, contenu_langue
    WHERE
    contenu.publication = 1 AND
    contenu.id = contenu_langue.contenu_id AND
    contenu_langue = "(langue en cour ou si aucun résultat langue par défaut)"


    Toujours dans un soucis d'optimisation des temps de traitement et pour ne pas multiplier les accès à la base.

    J'ai déjà cherché du coté des requêtes imbriquées ou autres HAVING mais sans résultats.


    Merci pour vos lumières


    Thomas



    PS: pour infos je suis en PHP / MySql

  2. #2
    Membre éclairé
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select * from contenu,contenu_langue
    where
    publication = 1
    AND contenu_langue.contenu_id = contenu.id
    AND (contenu_langue.code_langue='(langue en cour)' OR    
            contenu_langue.code_langue='(langue par défault)'
    et après tu ne retiens que ce que tu veux en fonction de la langue parce que là tu auras les deux cas, les ligne de la langue en cour et celles de la langue par défaut!

    bonne chance!

  3. #3
    Membre éclairé
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Par défaut
    Je rajoute:

    si tu veux test l'existance de ligne avec la langue en cour fait le avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(xx) from xx where xx
    et après tu regarde si >0

    re-bonne chance

    je pense qu'avec ces deux piste tu peux te faire un bout de code de 10 ligne max qui te fera ce que tu veux !

  4. #4
    Membre averti
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 33
    Par défaut Oufff !!
    J'ai donc trouver la solution.

    Merci de m'avoir guidé, j'avoue que je n'avais pas penser au OR (toujours demander un avis extérieur pour ce rendre compte de sa propre connerie ).


    Dans le principe voilà ce que je fais :

    SELECT * FROM contenu, contenu_langue
    WHERE
    contenu.id = contenu_langue.contenu_id
    AND publication = 1
    AND
    (
    (
    code_langue = langue en cour
    )
    OR
    (
    code_langue = langue par defaut
    AND NOT EXISTS (SELECT code_langue FROM contenu_langue WHERE contenu_id = contenu.id AND code_langue = langue en cour)
    )
    )


    Merci encore !


    Thomas

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

Discussions similaires

  1. [MySQL] Requêtes résultat bizarre
    Par delphin2 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/07/2011, 13h19
  2. Optimisation requête jointure "conditionnelle"
    Par BaBeuH dans le forum Adaptive Server Enterprise
    Réponses: 0
    Dernier message: 02/06/2010, 17h53
  3. Même requête, résultats différents
    Par zorino dans le forum SQL
    Réponses: 8
    Dernier message: 18/06/2008, 11h31
  4. [Requête]Résultat capricieux d'une requête
    Par Heureux-oli dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/04/2007, 09h36
  5. Requête calculée conditionnelle
    Par BLazE dans le forum Access
    Réponses: 4
    Dernier message: 19/01/2007, 21h08

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