好的,这是一个有趣的。我有 2 个表:tbl_notes、tbl_notes_categories
简单地说,tbl_notes 有一个 categoryid,我将 2 个表与该 ID 相关联。所以,没什么太复杂的。
我强制用户从下拉输入中选择一个类别,如果他们不选择某些内容,则阻止他们提交。
但是,我想改变这一点,主要是为了学习 JOIN 以及我可以使用它们走多远。
Sooooooo,我不会强制用户选择类别,相反,我会在 tbl_notes 中将 categoryid 默认为零。 (大多数用户会选择一个类别,但这是针对其他情况)
在查询中,我被锁定为仅显示具有 tbl_notes_categories 表中存在的 categoryid 的注释。但是,如果 categoryid 未被识别或等于零,我想有一个条件,然后指定另一个字符串。如“--未分配--”,或“--类别不存在--”
这是我的原始查询:
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
这会有所帮助,但如果类别表中缺少类别记录,我就会陷入显示替代文本的“条件”。
在 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 为零(假设您的类别表中没有匹配的行),它也将起作用,因为那样也找不到。如果出于某种原因您Thực ra想要在类别表中使用 id 零的行,那么您可以将其名称设置为“未知”。
请注意 IFNULL 是 MySQL 特定的。 COALESCE 函数也将起作用,并得到更多数据库的支持。
MySQL中一般的IF/ELSE语句可以使用IF或者对于更通用的解决方案,使用 CASE 表达式:CASE WHEN condition THEN expr1 ELSE expr2 END
.
Tôi là một lập trình viên xuất sắc, rất giỏi!