1

我有这个简单的(实际上我正在简化真实案例)SQL命令:

SELECT Username, Message
FROM Mail
WHERE DeleteBySender = '0'
LIMIT 1

但由于某种原因,我有特殊条件,即: IF Mail.Username = 'johndoe'那么 WHERE 子句不再是 DeleteBySender = '0'而是 DeleteByReceiver = '0'

简而言之,如何根据 Mail.Username 结果制作动态 WHERE 子句?

可以用单个 SQL 命令完成吗?因为如果不是,在我的实际情况下,它会导致 PHP 脚本更加复杂。

**更新:我真正期望的是,用简单的英语:如果 Mail.Username NOT 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
4

3 回答 3

5

SQL 中的一种解决方案OR利用子句来分解您的逻辑,如下所示:

SELECT Username, Message
FROM Mail
WHERE (Username != 'johndoe' AND DeleteBySender = '0')
OR (Username = 'johndoe' AND DeleteByReceiver = '0')
LIMIT 1

注意:LIMIT 1有关的。在不知道您的数据集的情况下,这可能会返回多个结果。你需要测试。

于 2013-01-24T19:37:40.940 回答
4
SELECT 
    Username, 
    Message
FROM Mail
WHERE (IF(Username='johndoe',DeleteByReceiver = 0,DeleteBySender =0))
LIMIT 1
于 2013-01-24T19:39:12.810 回答
0
SELECT Username, Message
FROM Mail
WHERE (Username = 'johndoe' AND DeleteByReceiver='0') OR DeleteBySender = '0'
LIMIT 1
于 2013-01-24T19:39:27.730 回答