代码之家  ›  专栏  ›  技术社区  ›  GrumpyCrouton

如果特定变量的mysql结果不存在,则获取其他变量的mysql结果

  •  0
  • GrumpyCrouton  · 技术社区  · 4 年前

    我有一个查询,它基于几个变量从数据库中选择行。

    $db->run("SELECT id, language, text FROM language WHERE language=? AND module=? AND method=?", [$language, $module, $method])->fetchAll(\PDO::FETCH_GROUP|\PDO::FETCH_UNIQUE);
    

    Array
    (
        [title] => Array
            (
                [language] => english
                [text] => Log In
            )
    
        [button] => Array
            (
                [language] => english
                [text] => Log In
            )
    )
    

    当用户选择了非英语语言时,我的问题就来了,因为英语是我网站的默认语言。如果所选语言没有特定的翻译,我希望此查询返回到英语翻译。

    例如,假设我有一个 spanish 翻译只针对 title 上面的键。查询当前只返回

    Array
    (
        [title] => Array
            (
                [language] => spanish
                [text] => Iniciar sesión
            )
    )
    

    但是,如果没有西班牙语的话,我想回到英语翻译上来。所以我的预期结果如下:

    Array
    (
        [title] => Array
            (
                [language] => spanish
                [text] => Iniciar sesión
            )
    
        [button] => Array
            (
                [language] => english
                [text] => Log In
            )
    )
    

    我怎样才能让我的查询像那样回退?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Akina    4 年前
    SELECT COALESCE(t2.id, t1.id) id,
           COALESCE(t2.language, t1.language) language,
           COALESCE(t2.text, t1.text) text
    FROM language t1
    LEFT JOIN language t2 ON t1.module = t2.module
                         AND t1.method = t2.method
                         AND t2.language = ?
    WHERE t1.language = 'english'
      AND t1.module = ? 
      AND t1.method = ?