+-
MySQL SELECT LEFT JOIN IF查询
我有一个名为category的简单数据库表之一:

category.id category.name category.lang
1           'apple'       'en'
1           'manzana'     'es'
1           ''            'de'
1           ''            'it'

变量:

$default_lang = 'en';
$current_lang = 'it';

我想使查询根据$current_lang返回category_name字段,但是如果category.name为空,则应使用$default_lang中的category.name,如下所示:

SELECT * FROM cat_list
    LEFT JOIN category ON cal_list.id = category.id
          AND IF(category.name = $current_lang = '', $default_lang, 'No Lang')

请让我知道,如何解决该查询以使其正常工作?

===

好的,现在我有了一个好主意:

SELECT * FROM cat_list LEFT JOIN category 
           ON cal_list.id = category.id 
          AND category_lang IN ($curreng_lang, $default_lang)
          AND category_name <> ''

它工作正常,但是如果两种语言都有名称值,我应该担心“ IN”顺序吗?

最佳答案
SELECT catname=
CASE name
         WHEN '' THEN (select name from Category where lang=$default_lang limit 1)
         ELSE name
      END
FROM Category where id=$current_lang

说明:
这里的查询是在select语句中使用case语句,
哪里
外部查询使用条件“ id = $current_lang”

因此在select语句中它将具有name =”,因此对于

catname=
    CASE name
             WHEN '' THEN (select name from Category where lang=$default_lang limit 1)
             ELSE name
          END

名称是“”,因此应在何时执行第一个条件
在这里它将执行查询

(select name from Category where lang=$default_lang limit 1)
name apple is returned (because language is ‘en’)
and that will be sotred to catname variable. which will be returned in result

如果它将第一次获得带有名称的值(id = $current_lang),它将返回它.

点击查看更多相关文章

转载注明原文:MySQL SELECT LEFT JOIN IF查询 - 乐贴网