gpt4 book ai didi

mysql - 如何使用默认语言查询表中的多语言记录

转载 作者:搜寻专家 更新时间:2023-10-30 23:26:34 25 4
gpt4 key购买 nike

我有一个问题卡住了。我有一个类别表和 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. 永远不要FROM 子句中使用逗号。
  2. 始终使用正确、明确、标准 JOIN 语法。
  3. 使用有意义的表别名!

您可以使用 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 ;

我有点不清楚 is_default 是如何确定的。如果您正在搜索的语言默认值,那么该值是否应该为真?

关于mysql - 如何使用默认语言查询表中的多语言记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56519545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com