MySQL选择+左连接+如果查询
我有一个名为category的简单DB表:MySQL选择+左连接+如果查询,mysql,select,join,if-statement,Mysql,Select,Join,If Statement,我有一个名为category的简单DB表: category.id category.name category.lang 1 'apple' 'en' 1 'manzana' 'es' 1 '' 'de' 1 '' 'it' 变量: $default_lang = 'en'; $current_lang = 'it'; 我想根据$current\u
category.id category.name category.lang
1 'apple' 'en'
1 'manzana' 'es'
1 '' 'de'
1 '' 'it'
变量:
$default_lang = 'en';
$current_lang = 'it';
我想根据$current\u lang进行查询,返回category\u name字段,但如果category.name为空,则应使用$default\u 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 <> ''
它工作得很好,但是如果两种语言都有名称值,我应该担心顺序吗
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\u lang
所以在select语句中,它的名称为,所以对于
catname=
CASE name
WHEN '' THEN (select name from Category where lang=$default_lang limit 1)
ELSE name
END
名称为,所以第一个条件应在何时执行
在这里,它将执行查询
从类别中选择名称,其中lang=$default\u lang limit 1
返回名称apple,因为语言为“en”
这将与catname变量有关。这将在结果中返回
如果它将获得name first time id=$current\u lang的值,它将返回该值。category.name是NULL还是空字符串
如果为NULL,则use COALESCE返回列表中的第一个非NULL值
如果字符串为空,则使用If
用户1664869,
这个怎么样
SELECT catname=CASE c1.name
WHEN '' THEN c2.name
ELSE c1.name
END
FROM
Category c1
INNER JOIN Category c2 ON c1.lang=$current_lang and c2.lang=$default_lang;
请详细说明,以便用户能够更容易地理解代码,因为答案不是回答问题的好方法。有可能在选择中不选择就实现它?因为表category有大约800000行:我确实使用空字符串,但是:IFcategory.name=,$default_lang,category.name name,在category.name的情况下,这只会为'name'字段返回'en'$default_lang?@user1664869 category.name,如果它不是null或空字符串,则会显示它。Johnny,如果是这样的话,你会怎么想:在$curreng\u lang、$default\u lang?@user1664869中,从cat\u list LEFT JOIN category中选择*在cal\u list.id=category.id和category\u lang中加入$curreng\u lang、$default\u lang?@user1664869,它只会显示语言为og en和it的记录,没有其他内容。是的,只有两行可以,一行是当前的,另一行是默认的\u lang,但最后我只需要选择一个category.name
SELECT category.id,
IF(category.name = '', $default_lang,category.name) name,
IF(category.lang = '', $current_lang,category.lang) lang
FROM cat_list
LEFT JOIN category
ON cal_list.id = category.id
SELECT catname=CASE c1.name
WHEN '' THEN c2.name
ELSE c1.name
END
FROM
Category c1
INNER JOIN Category c2 ON c1.lang=$current_lang and c2.lang=$default_lang;