我有这个简单的(实际上我正在简化真实情况)SQL命令:
SELECT Username, Message
FROM Mail
WHERE DeleteBySender = '0'
LIMIT 1
但出于某种原因,我有特殊条件,那就是:如果 Mail.Username = 'johndoe' 则 WHERE 子句不再DeleteBySender = '0'
,而是DeleteByReceiver = '0'
。
简而言之,如何根据 Mail.用户名结果制作动态 WHERE 子句?
可以用单个SQL命令来完成吗?因为如果没有,在我的真实情况下,它会导致PHP脚本更加复杂。
**更新:我真正期望的,用简单的英语:如果 Mail.Username 不是 johndoe,SQL 命令将是这样的:
SELECT Username, Message
FROM Mail
WHERE DeleteBySender = '0'
LIMIT 1
但如果 Mail.Username 是 johndoe,SQL 命令将是这样的:
SELECT Username, Message
FROM Mail
WHERE DeleteByReceiver = '0'
LIMIT 1
SQL 中的一种解决方案,利用 OR
子句来分解逻辑,如下所示:
SELECT Username, Message
FROM Mail
WHERE (Username != 'johndoe' AND DeleteBySender = '0')
OR (Username = 'johndoe' AND DeleteByReceiver = '0')
LIMIT 1
注意:LIMIT 1
令人担忧。在不知道数据集的情况下,这可能会返回多个结果。你需要测试。
SELECT
Username,
Message
FROM Mail
WHERE (IF(Username='johndoe',DeleteByReceiver = 0,DeleteBySender =0))
LIMIT 1
SELECT Username, Message
FROM Mail
WHERE (Username = 'johndoe' AND DeleteByReceiver='0') OR DeleteBySender = '0'
LIMIT 1