Mysql 如何使用默认语言查询多语言记录的表
我有一个问题卡住了。我有一个category表和category_translate表来支持多种语言 我希望查询可以用我指定的语言搜索所有类别。如果语言记录不存在,它将返回默认语言(即英语)。我找了很多,但找不到解决办法。有人能帮忙建议一下如何解决这个问题吗Mysql 如何使用默认语言查询多语言记录的表,mysql,sql,database,Mysql,Sql,Database,我有一个问题卡住了。我有一个category表和category_translate表来支持多种语言 我希望查询可以用我指定的语言搜索所有类别。如果语言记录不存在,它将返回默认语言(即英语)。我找了很多,但找不到解决办法。有人能帮忙建议一下如何解决这个问题吗 category --------------- id category_translate -------------------- id category_id language_id is_default name 除结果外: i
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
上述查询可以使用“zh”语言获取类别,但无法使用默认语言“en”获取其他类别
FROM
子句中使用逗号左连接解决您的问题。事实上,其中两项:
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 ;
我不太清楚默认值是如何确定的。如果您正在搜索的语言是默认语言,那么该值是否为真?当我创建类别翻译记录时,系统将默认标记英语为默认语言,如果搜索语言中缺少,我们希望使用该类别的英语版本。我不确定这是不是一个好的做法。请随意提出建议。
id language_id name is_default
------------------------------------------------
1 'zh' 'Food-ZH' 0
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 ;