在我的 MySQL 数据库中,我将英语数据存储在表 s_p
(id, name, prod_id) 中,并存储在另一个表 s_p_l
(id,prod_id, name,locale) 另外还有产品的本地化名称(如果有)。
目前我使用
SELECT name FROM s_p_l WHERE prod_id=2 AND locale="de_DE";
首先检查我是否有产品 #2 的本地化名称,然后如果没有返回任何行,
SELECT name FROM s_p WHERE prod_id=2;
获取英文名称。
现在,在给定产品 ID 和区域设置的情况下,我如何在一次查询中获取本地化产品名称(并以英文名称作为备用名称)?
(是的,我使用准备好的语句来避免 SQL 注入(inject))
最佳答案
听起来像是左外连接的工作。从您的 s_p
表中进行选择(因为您知道该值将在那里),但对您的 s_p_l
表进行左外连接。如果没有 s_p_l
记录,您只会获得 s_p_l
列的空值,但您仍会从 s_p
获得所有匹配的行.
SELECT
s_p_l.name AS localizedName,
s_p.name as fallbackName
FROM
s_p
LEFT OUTER JOIN s_p_l ON
s_p_l.prod_id = s_p.prod_id AND
s_p_l.locale = "de_DE"
WHERE s_p.prod_id = 2
您甚至可以将 SELECT 更改为仅返回一列:SELECT ISNULL(s_p_l.name, s_p.name)
。 (我的背景是 SQL Server,但我认为这是应该在 mySQL 上运行的标准 SQL。)
关于mysql - 数据库中的区域设置支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14794928/