加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql-数据库问题:从表中获取默认翻译

发布时间:2020-12-11 23:23:13 所属栏目:MySql教程 来源:网络整理
导读:美好的一天, 我有一个MySQL表描述,其中包含字段:lang_id,label,short_description,long_description和is_default. 在我的应用程序中,根据当前语言从数据库中获取产品描述.目前一切正常,但是我想为每种产品添加一个默认描述,以便找不到所需语言的描述,而是获

美好的一天,

我有一个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的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读