简体   繁体   English

基于SELECT列的WHERE条件下的MySQL IF

[英]MySQL IF in WHERE condition Based On SELECT Column

I have this simple (actually I'm simplifying the real case) SQL command : 我有这个简单的(实际上是在简化实际情况)SQL命令:

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

but for some reason, I have special condition, that is : IF Mail.Username = 'johndoe' then the WHERE clause is not DeleteBySender = '0' anymore, but DeleteByReceiver = '0' . 但是由于某种原因,我有一个特殊条件,即: 如果Mail.Username ='johndoe',则WHERE子句不再 DeleteBySender = '0'而是 DeleteByReceiver = '0'

in short, how to make dynamic WHERE clause based on Mail.Username result? 总之,如何使基于Mail.Username结果的动态WHERE子句?

can it be done with single SQL command? 可以用单个SQL命令完成吗? because if not, in my real case, it will cause PHP scripting more complex. 因为如果不是这样,在我的真实情况下,它将导致PHP脚本编写更加复杂。

**UPDATE : what I really expect, in plain English : if Mail.Username NOT johndoe, SQL command will be like this : ** UPDATE:我真正希望的,用简单的英语说:如果Mail.Username不是johndoe,SQL命令将如下所示:

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

but if Mail.Username IS johndoe, SQL command will be like this : 但是如果Mail.Username是johndoe,则SQL命令将如下所示:

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

A solution in SQL utilizing an OR clause to break up your logic as follows: 使用OR子句破坏逻辑的SQL 解决方案如下:

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

Note: The LIMIT 1 is concerning. 注意: LIMIT 1是有关的。 Without knowing your dataset, this may return more than one result. 在不知道您的数据集的情况下,这可能会返回多个结果。 You need to test. 您需要测试。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM