admin 管理员组文章数量: 1086019
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,我们将及时予以处理。
本文标签: mysql查询时字段翻译
版权声明:本文标题:mysql查询时字段翻译 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1693587124a230839.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论