Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用默认语言查询多语言记录的表_Mysql_Sql_Database - Fatal编程技术网

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

Mysql 如何使用默认语言查询多语言记录的表,mysql,sql,database,Mysql,Sql,Database,我有一个问题卡住了。我有一个category表和category_translate表来支持多种语言 我希望查询可以用我指定的语言搜索所有类别。如果语言记录不存在,它将返回默认语言(即英语)。我找了很多,但找不到解决办法。有人能帮忙建议一下如何解决这个问题吗 category --------------- id category_translate -------------------- id category_id language_id is_default name 除结果外: i

我有一个问题卡住了。我有一个category表和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



上述查询可以使用“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 ;