如何查询表以使用默认语言的多语言记录

时间:2019-06-10 01:14:16

标签: mysql sql database

我遇到了问题。我有一个类别表和category_translate表来支持多种语言。

我希望查询能用我指定的语言搜索所有类别。如果语言记录不存在,它将返回默认语言(即英语)。我进行了很多搜索,但找不到解决方案。任何人都可以帮助建议如何解决它。

category
---------------
id

category_translate
--------------------
id
category_id
language_id
is_default
name

除了结果:

id   language_id      name.         is_default
------------------------------------------------
1    'en'             'Food'        1
1    'zh'             'Food-ZH'     0
2    'en'             'Cloth'       1


SELECT a.id, b.language_id, b.name, b.is_default
FROM category a, category_translate b
WHERE a.id = b.category_id AND language_id = 'zh'


id   language_id      name          is_default
------------------------------------------------
1    'zh'             'Food-ZH'     0


上面的查询可以获取使用“ zh”语言的类别,但无法获取使用默认语言“ en”的其他类别

1 个答案:

答案 0 :(得分:1)

  1. 从不<div formArrayName="questionForm.get('answers').controls"> <ion-card-content"> <ion-input formControlName="data"> </ion-input> <ion-button [disabled]="questionForm.get('answers').invalid (click)="addAnswer()" >Add answer </ion-button> </ion-card-content> </div> <ion-list *ngFor="let answer of questionForm.get('answers).value; index as i"> <ion-item lines="none"> <ion-radio value="{{ i }}"></ion-radio> <ion-label>{{ answer.data }}</ion-label> </ion-item> </ion-list> 子句中使用逗号。
  2. 始终使用正确的,明确的,标准 FROM语法。
  3. 使用有意义的表别名!

您可以使用JOIN解决问题。实际上其中两个:

LEFT JOIN

我对SELECT c.id, COALESCE(ct.language_id, ctdefault.language_id) as language_id, COALESCE(ct.name, ctdefault.name) as name, (ct.language_id is null) as is_default FROM category c LEFT JOIN category_translate ct ON ct.category_id = c.id AND ct.language_id = 'zh' LEFT JOIN category_translate ctdefault ON ctdefault.category_id = c.id AND ctdefault.is_default ; 的确定方式尚不清楚。如果您要搜索的语言是 的默认语言,则该值是否为true?