mysql if / else场景

时间:2011-02-19 21:29:02

标签: mysql if-statement

好的,这是一个有趣的。我有2个表:tbl_notes,tbl_notes_categories

简单地说,tbl_notes有一个categoryid,我将这两个表与该ID相关联。所以,没有什么太复杂的。

我强制用户从下拉菜单中选择一个类别,如果他们不选择某些内容,则阻止他们提交。

但是,我想改变这一点,主要是为了学习JOIN以及我可以用它们走多远。

Sooooooo,我不会强迫用户选择一个类别,而是在tbl_notes中将categoryid默认为零。 (大多数用户将选择一个类别,但这适用于其他实例)

在查询中,我被锁定只显示tbl_notes_categories表中存在categoryid的注释。但是,如果categoryid未被识别或者等于零,我想要一个条件,然后指定另一个String。比如“--Unssigned--”或“--Category不存在 - ”

这是我的原始查询:

SELECT n.notesubject, c.categoryname 
FROM `tbl_notes` n, `tbl_notes_categories` c 
WHERE n.categoryid = c.categoryid 

这不会让我看到没有categoryid的笔记,所以我拉了这个:

SELECT n.notesubject, c.categoryname
FROM `tbl_notes` n
 LEFT JOIN `tbl_notes_categories` c ON n.categoryid = c.categoryid

这有帮助,但是如果类别表中缺少类别记录,我会陷入显示备用文本的“条件”。

1 个答案:

答案 0 :(得分:0)

在MySQL中,您可以使用IFNULL

SELECT
    n.notesubject,
    IFNULL(c.categoryname, 'Unknown') AS categoryname
FROM tbl_notes AS n
LEFT JOIN tbl_notes_categories AS c
ON n.categoryid = c.categoryid

如果找不到类别,这将有效,但如果类别ID为零,假设您的类别表中没有匹配的行,那么它也会起作用,因为它也将无法找到。如果出于某种原因, 想要在分类表中使用id为零的行,则可以将其名称设置为“未知”。

请注意,IFNULL是MySQL特有的。 COALESCE功能也可以使用,并得到更多数据库的支持。

对于一般在MySQL中的IF / ELSE语句,可以使用IF,或者对于更通用的解决方案,使用CASE表达式:CASE WHEN condition THEN expr1 ELSE expr2 END