12
votes

MySQL rejoindre avec condition

J'ai deux table avec cette structure

Category.id     CategoryLocale.title    CategoryLocale.lang
1               HomE PAGEa              de
2               about                   en


4 commentaires

Si vous avez EN et fa pour la catégorie 2 mais je n'ai pas de quelle langue vous devez choisir?


Pouvez-vous s'il vous plaît mentionner correctement la sortie que vous attendez?


@HamleThakobyan non important. d'abord que MySQL Server


Sortie du désir ajouté. S'il vous plaît vérifier et suggérer la requête. ty


3 Réponses :


18
votes
SELECT Category.id,
        COALESCE(a.lang, b.lang) lang,
        COALESCE(a.title, b.title) title
FROM   categories AS Category
      LEFT JOIN category_i18ns AS a
           ON a.category_id = Category.id AND a.lang = 'de'
      LEFT JOIN category_i18ns AS b
           ON b.category_id = Category.id AND b.lang = 'en'

SQLFiddle Demo

7 commentaires

Si nous ne savons pas quelle langue a été ajoutée à la catégorie spéciale? Comment puis-je les récupérer. Par exemple, la catégorie ID 3 ajoute juste via fr langue et ne pas avoir une autre langue


Vous ne faites-vous pas une hypothèse ici que vous aurez une entrée pour EN dans toutes les catégories?


@sub_stantial Nope .. Il n'y a pas de langue par défaut majeure pour toutes les catégories.


@sweb: Oui je suis d'accord. Quoi qu'il en soit, ma question était pour Kuya John.


alors quels sont les gars de la requête: D


@sweb Votre question était NotClear c'est pourquoi je suppose que chaque catégorie a l'anglais. Essayons de le faire sortir. Question de suivi, Do La catégorie a au moins une langue?


Très utile, merci!



1
votes

D'accord, ce n'est pas la meilleure solution, mais je pense que cela devrait fonctionner bien: xxx

exemple de violon SQL


0 commentaires

2
votes

Si vous avez un ordre de préférence, Gauche Joignez-vous à toutes les langues et mettez-les à des fonacences par ordre de préférence:

SELECT Category.id,
        COALESCE(a.lang, b.lang) lang,
        COALESCE(a.title, b.title) title
FROM   categories AS Category
      LEFT JOIN category_i18ns AS a
           ON a.category_id = Category.id AND a.lang = 'de'
      LEFT JOIN category_i18ns AS b
           ON b.category_id = Category.id
GROUP BY Category.id


0 commentaires