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
函数。:)