代码之家  ›  专栏  ›  技术社区  ›  Harshwardhan Sharma

如何获取默认值的记录

  •  3
  • Harshwardhan Sharma  · 技术社区  · 6 年前

    我正在设计一个多语种网站的数据库。我想使用以下流行的方法:

    postid  |   post_title  |  lang
    ------------------------------
    1       |  title1        |  en
    1       |  title2        |  fr
    2       |  title3        |  en
    

    当我改变语言时,我会运行一个查询来获取

    select post_title from post where lang = "en" group by postid
    
    postid  |   post_title  |  lang
    ------------------------------
    1       |  title1        |  en
    2       |  title3        |  en
    
    
    select post_title from post where lang = "fr" group by postid
    
    postid  |   post_title  |  lang
    ------------------------------
    1       |  title2        |  fr
    

    问题是如果我想要一个查询,它给我的结果是

     postid  |   post_title  |  lang
    ------------------------------
    1       |  title2        |  fr
    2       |  title3        |  en
    

    意思是如果我没有得到 FR 那我就默认了 语言职位。

    1 回复  |  直到 6 年前
        1
  •  1
  •   AymDev    6 年前

    此查询将返回行,其中 lang = "fr" 或行 = "en" 如果在中找不到记录 “FR” 对应的 postid .

    SELECT
        *
    FROM post AS a
    WHERE
        a.lang = "fr"
        OR (
            a.lang = "en"
            AND (
                SELECT COUNT(*)
                FROM post AS b
                WHERE
                    b.lang = "fr"
                AND b.postid = a.postid
            ) = 0
        )
    GROUP BY a.postid
    

    这种尝试是有效的,但我不知道这是否是实现它的最佳方法。