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的

猜你在找的MySQL相关文章