mysql连接语言环境或任何其他语言环境上的翻译表

mysql连接语言环境或任何其他语言环境上的翻译表,mysql,join,locale,Mysql,Join,Locale,我正在创建一个不同语言的产品网站。我想从我的数据库中获得一个产品列表,其中包含产品的名称。但是,产品名称在翻译表中,并非每个产品都有每种语言的翻译 这就是数据库的外观: +-----------+ +---------------+ +-----------+ | Products | | Translations | | Languages | +-----------+ +---------------+ +----

我正在创建一个不同语言的产品网站。我想从我的数据库中获得一个产品列表,其中包含产品的名称。但是,产品名称在
翻译
表中,并非每个产品都有每种语言的翻译

这就是数据库的外观:

+-----------+       +---------------+       +-----------+
| Products  |       | Translations  |       | Languages |
+-----------+       +---------------+       +-----------+
| id        |       | product_id    |       | code      |
| ...       |       | language_code |       | ...       |
+-----------+       | value         |       +-----------+
                    +---------------+
我想做的是得到所有产品的名称。名称应位于用户区域设置中,如果不可用,则应为英语;如果不可用,则应位于任何可用的区域设置中

我当前正在使用此代码,但如果当前区域设置中没有名称,它将返回
null

SELECT p.*, t.value 
FROM Products p
INNER JOIN Translations t ON t.product_id = id
WHERE t.language_code = {{ locale }}
ORDER BY t.value
mysql中是否有一个函数可以用来定义应该搜索的区域设置的顺序?问题是,在我的结果集中,每个产品只需要一行


谢谢您的帮助。

您可以使用两个
左连接
s,仅当第一个值不可用时默认为英语:

SELECT p.*, COALESCE(t.value, teng.value) as value
FROM Products p LEFT JOIN
     Translations t
     ON t.product_id = p.id AND
        t.language_code = {{ locale }} LEFT JOIN
     Translations teng
     ON teng.product_id = p.id AND
        teng.language_code = 'EN'
ORDER BY value;

请注意,语言的条件需要放在
on
子句中,而不是
WHERE
子句中。

谢谢,这对我很有帮助。我不知道
COALESCE
函数。:)