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

Langage SQL Discussion :

Mettre une priorité dans un JOIN


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Points : 25
    Points
    25
    Par défaut Mettre une priorité dans un JOIN
    Bonjour tout le monde
    Dans le cadre de mon job étudiant je dois réaliser un site multi-langue.
    Mais je rencontre une difficulté dans plusieurs de mes requetes.
    Explication :
    L'admin a un idLangue dans sa variable de session.
    J'aimerai donc sélectionné le contenu en fonction de cet idLangue, jusque la pas de probleme.
    Là où ça cale c'est que si le contenu existe en anglais mais pas en français et que l'admin a choisi le français comme langue il faudrait quand même afficher le contenu anglais.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $querysscat = $sql->query ('SELECT sscategorie.idsscategorie, 
    sscategorietexte.nom, 
    sscategorie.statut, 
    sscategorie.idSscategorie
    FROM sscategorie 
    LEFT JOIN sscategorietexte
    ON sscategorietexte.idSscategorie = sscategorie.idSscategorie AND ( sscategorietexte.idLangue = "'.$_SESSION['idLangue'].'" OR je sais pas quoi mettre)
    WHERE sscategorie.statut != "Supprime" AND sscategorie.idCategorie = "'.$categorie['idCategorie'].'"
    GROUP BY sscategorie.idSscategorie
    ORDER BY sscategorietexte.nom');

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    1) Ce serait sympa de retirer tout ce qui n'est pas du SQL dans ta requête, sinon c'est moi qui suis obligé de le faire, même s'il n'y en a pas beaucoup, je n'ai pas envie de perdre un temps inutile pour t'aider.

    2) Pour résoudre ton problème, il faudrait que ton moteur sache quelle langue choisir si la langue demandée n'existe pas, une langue pas défaut par exemple IdLangue = 0
    (J'ai supposé que la langue par défaut était toujours remplie, d'où le INNER JOIN)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT c.idsscategorie, COALESCE(ct.nom, cd.nom), c.statut, c.idSscategorie
    FROM sscategorie c LEFT  JOIN sscategorietexte ct
                               ON ct.idSscategorie = c.idSscategorie 
                              AND ct.idLangue = :LangueSession
                       INNER JOIN  sscategorietexte cd
                               ON ct.idSscategorie = c.idSscategorie 
                              AND ct.idLangue = 0
    WHERE c != 'Supprime'
      AND c.idCategorie = :Categorie

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    oups désolé pour le code .
    J'essaye tout de suite
    Merci beaucoup de la réponse.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT c.idsscategorie, 
    							  COALESCE(ct.nom, cd.nom) AS nom, 
    							  c.statut, 
    							  c.idSscategorie
    							  FROM sscategorie c 
    							  LEFT JOIN sscategorietexte ct
                                  ON ct.idSscategorie = c.idSscategorie AND ct.idLangue = "'.$_SESSION['idLangue'].'"
                     			  LEFT JOIN  sscategorietexte cd
                        	      ON cd.idSscategorie = c.idSscategorie AND cd.idLangue != "'.$_SESSION['idLangue'].'"
    							  WHERE c.statut != "Supprime"
    							  GROUP BY c.idSscategorie
    Merciiiiiiiiiii
    Je connaissais pas COALESCE Avec ça ça marche du tonnerre ^^

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

Discussions similaires

  1. [JSP] mettre une chaine dans un format precis
    Par logica dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/06/2005, 10h21
  2. Réponses: 6
    Dernier message: 14/12/2004, 02h47
  3. Réponses: 5
    Dernier message: 03/02/2004, 14h20
  4. [Drag & Drop] Mettre une fiche dans un panel
    Par corwin_d_ambre dans le forum Composants VCL
    Réponses: 5
    Dernier message: 12/01/2004, 10h46
  5. Peut on mettre une image dans une BD MySQL ?
    Par maddog2032 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/07/2003, 16h18

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