mysql 加入语言环境或任何其他翻译 table

mysql join translations table on locale or any other

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

这是数据库的样子:

+-----------+       +---------------+       +-----------+
| Products  |       | Translations  |       | Languages |
+-----------+       +---------------+       +-----------+
| id        |       | product_id    |       | code      |
| ...       |       | language_code |       | ...       |
+-----------+       | value         |       +-----------+
                    +---------------+

我想做的是让所有产品都带有他们的名字。该名称应该在用户区域设置中,如果这不可用,它应该是英文的,如果这不可用,它应该在任何可用的区域设置中。

我目前正在使用此代码,但如果当前语言环境中没有名称,它只是 returns 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 中是否有函数可用于定义应搜索的区域设置顺序?问题是我的结果集中每个产品只需要一行。

感谢您的帮助。

您可以使用两个 LEFT JOIN,仅当第一个值不可用时才默认为英语:

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 子句中。