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启动不了(5.6.45 x32版本,使用innoDB),重装后...
整数类型 标准 SQL 中支持 INTEGER 和 SMALLINT 这两种类型,MySQL 数据库除了支持这两种类型以外,还扩...
一条 SQL 查询语句结构如下: SELECT DISTINCT <select_list> FROM <left_table&...
数据备份 1. 备份数据库 使用 mysqldump 命令可以将数据库中的数据备份成一个文本文件,表的结构和数据...
概述 在实际工作中,在关系数据库(MySQL、PostgreSQL)的单表数据量上亿后,往往会出现查询和分析变慢...
概述 触发器是 MySQL 的数据库对象之一,不需要程序调用或手工启动,而是由事件来触发、激活,从而实现...