mysql查询时字段翻译_mysql-数据库问题:从表中获取默认翻译

美好的一天,

我有一个MySQL表描述,其中包含字段:lang_id,label,short_description,long_description和is_default.

在我的应用程序中,根据当前语言从数据库中获取产品描述.目前一切正常,但是我想为每种产品添加一个默认描述,以便找不到所需语言的描述,而是获取默认描述.

现在,我的要求如下所示:

SELECT

description.id AS record_id

description.label,description.short_description,description.long_description

FROM

products,description,languages

WHERE

products.id = '.$someProductID.' AND

products.id = description.product_id AND

languages.id = description.lang_id AND

languages.code = "'.$someLang.'"

在所需的翻译不存在时,没有人有解决方案来获取产品的默认描述吗?

我想在我的请求中添加一些IFNULL语句,如下所示:

IFNULL(description.label,(SELECT label FROM description WHERE product_id = '.$someProductID.' AND is_default = 1) ) AS label

但是我对这样复杂的查询不是很熟悉,我无法使其正常工作.

我愿意接受建议;)

谢谢 !

最佳答案

这个:

SELECT p.*,COALESCE (dn.name,den.name) AS cname

FROM products p

LEFT JOIN

description dn

ON dn.product_id = p.id

AND dn.language =

(

SELECT id

FROM language

WHERE code = 'your_language'

)

LEFT JOIN

description den

ON den.product_id = p.id

AND den.is_default

)

WHERE p.id = @my_product

,或这个:

SELECT p.*,(

SELECT den.name

FROM description den

WHERE den.product_id = p.id

AND den.is_default

)

) AS cname

FROM products p

LEFT JOIN

description dn

ON dn.product_id = p.id

AND dn.language =

(

SELECT id

FROM language

WHERE code = 'your_language'

)

WHERE p.id = @my_product

在除MySQL以外的所有数据库中,第一种方法在语言翻译很少时效率更高,第二种方法在翻译很多时效率更高.

在MySQL中,第二个查询(使用COALESCE)总是效率更高.

有关性能的详细信息,请参阅我的博客中有关此问题的系列文章:

> Fallback language names: Oracle

,并进一步浏览其他RDBMS的

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值