2016-02-13 50 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