2016-02-13 54 views
0

我的应用程序当前连接到MySQL和执行此查询:MySQL的CASE/IF使用

select nickname 
from users 
where nickname = '$nick' and password = '$pass' 

$nick$pass由应用程序插入。

我需要推进这一查询做到以下几点:

  • 如果where nickname = '$nick' and password = '$pass'返回一行,只是返回的行如常。
  • 如果where nickname = '$nick' and password = '$pass'返回0行,我需要它来检查'$nick'是否存在,并且'$pass'是错误的,即有0行,如果是这种情况,则返回0行,否则如果存在表中没有'$nick',无论如何都返回该行。

即,如果昵称在表中并且密码正确,或者昵称不在表中,则返回一行。否则,如果昵称在表中并且密码不正确,则返回0行。

这可能使用MySQL吗?

+0

哪一行应该如果昵称不存在于表中返回? – Kenney

+0

@Kenney如果它不存在,那么它应该只是返回昵称。抱歉。 – user5603796

回答

0

试试这个:

select nickname 
from users 
where nickname = '$nick' and password = '$pass' 

union 

select '$nick' as nickname 
from users AS t1 
where not (nickname = '$nick' and password = '$pass') and 
     not exists (select 1 
        from users 
        where nickname = '$nick') 

Demo here

+0

即使$ nick不在表格中,它也会返回0行。测试不在表格中,$ nick ='Test',$ pass ='',返回0行。应该返回测试。 – user5603796

+0

@ user5603796检查[this](http://sqlfiddle.com/#!9/548553/3)。用户'11'不包含在表中,但查询按预期返回一行。 –

+0

在真正的MySQL中不起作用。 (昵称='测试'和密码='通')昵称的昵称,昵称='测试'和密码='通' 空集(0.00秒) – user5603796