gpt4 book ai didi

mysql - SQL 查询中的流程控制/条件 (CASE)

转载 作者:行者123 更新时间:2023-11-29 20:59:10 25 4
gpt4 key购买 nike

我有一个多语言的 CMS。整个系统使用了大约 300 个单词和短语,当用户更改所选语言时,这些单词和短语也会发生变化。英语是默认语言。其他语言可能在任何给定点都没有被完全翻译。我希望根据具体情况,在特定单词或短语尚未翻译成所选语言的情况下,使用英文版本。(堆栈溢出不允许使用table html标签,所以我将使用无序列表显示两条记录)

language_id label         translation
en your_account Your Account
zh your_account 您的賬戶

主键位于 language_id 和标签上

我在 MariaDB 上使用 PDO。我遇到的查询部分是 if/case 语句,我知道下面的语句是完全错误的,但它演示了我希望实现的目标:

SELECT translation_result 
FROM (SELECT translation as translation_result FROM languages WHERE
label='your_account' AND language_id = 'zh')A
CASE A.translation_result IS NOT NULL ELSE
(SELECT translation as translation_result FROM languages WHERE
label='your_account' AND language_id = 'en')B

最佳答案

这就是我要做的:

SELECT (IFNULL(ZH.translation, EN.translation)) AS translation_result
FROM languages EN
LEFT JOIN languages ZH ON EN.label=ZH.label AND ZH.language_id = 'zh'
WHERE EN.label='your_account'
AND EN.language_id = 'en'

由于英语是主语言并且总是填充,因此您对英语记录进行基本查询,它总是返回一些内容。根据英语返回的结果,您可以在同一张表上使用相同的标签但使用不同的语言进行LEFT JOIN。如果 JOIN 匹配某些内容(您没有 NULL),则使用此值

但我认为您显示的查询不是一个很好的示例,因为它不能代表应用程序中对语言表的最终查询。通常,您应该在其他表上进行“主”查询,并按照用户的语言在语言表上添加LEFT JOIN查询您可以添加一个真实的示例,我将调整我的答案以匹配它。

关于mysql - SQL 查询中的流程控制/条件 (CASE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37378051/

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