假设我有一个像这样的 MySQL 表
product
:
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| id | varchar(36) | NO | PRI | NULL | |
| lang | varchar(255) | YES | | NULL | |
| description | varchar(255) | YES | | NULL | |
+-------------+--------------+------+-----+---------+-------+
我想将这个
product
信息翻译成几种语言。目前只有description
字段可翻译,但我们会在未来添加更多可翻译字段。
为了启用翻译,我创建了一个新表
product_translation
,如下所示:
CREATE TABLE product_translation (
id VARCHAR(36) PRIMARY KEY,
language_code VARCHAR(10),
product_id VARCHAR(36),
description VARCHAR(255),
FOREIGN KEY (product_id) REFERENCES product(id)
);
现在,如果请求的语言是英语或不存在,我使用
description
表的product
字段。否则,我像这样加入product
和product_translation
表:
SELECT product.*,
product_translation.language_code,
product_translation.description
FROM product INNER JOIN product_translation
ON product_translation.product_id = product.id
WHERE product_translation.language_code = 'fr';
有意义吗?
我可以使用一个 SQL 语句检索任何语言的产品吗?
从
description
表中删除product
字段,复制数据,并始终使用连接会更好吗?
如果请求的语言是英语或不存在我使用
description
表的字段。否则,我加入product
和product
桌子product_translation
您可以使用 mysql 中的 COALESCE 函数实现此目的
MySQL COALESCE() 函数用于返回第一个非空值 表达式列表中的值。如果列表中的所有值都计算 为 NULL,则 COALESCE() 函数返回 NULL。
您的查询可以写成:
SELECT product.*,
COALESCE(product_translation.language_code, 'en') AS language_code,
COALESCE(product_translation.description, product.description) AS description
FROM product LEFT JOIN product_translation
ON product_translation.product_id = product.id
AND product_translation.language_code = 'fr';
从产品中删除描述字段会更好吗 表,复制数据,并始终使用连接 ?
如果你打算很少翻译product_information;那么您可以保留
description
字段,否则您可以将其从product
表中删除并将数据复制到product_translation
表。