2013-07-02 55 views
0

我正在将此代码写入一个PHP变量,其中$ username和$ email被替换。我将它回显到屏幕上,它看起来很正确。我假设MySQL代码存在问题,因为我总是得到的唯一结果是“可接受的”。任何帮助?找不到为什么每个查询都返回else(case when)

SELECT CASE 
WHEN email='$email' THEN '$email is already associated with an account' 
WHEN username='$username' THEN '$username is already taken' 
ELSE 'acceptable' 
END AS result FROM collaborator 
UNION 
SELECT CASE 
WHEN email='$email' THEN '$email is already associated with an account' 
WHEN username='$username' THEN '$username is already taken' 
ELSE 'acceptable' 
END AS result 
FROM waitForValidation 
LIMIT 1; 
+0

可能是区分大小写的问题?在所有情况下,工会是否会返回“不可接受”的结果?因此返回的顺序可能是可变返回限制1,从而消除了正确的值? – xQbert

回答

1

您的问题是,有一个或其他表中匹配失败,所以'acceptable'来自某处。然后,您正在使用union,通常通过排序来删除重复项。尝试做比赛以不同的方式:

select (case when max(email) = $email then '$email is already associated with an account' 
      when max(username)='$username' THEN '$username is already taken' 
      else 'acceptable' 
     end) 
from (select email, username 
     from collaborator 
     where email = '$email' or username= '$username' 
     union 
     select email, username 
     from waitForValidation 
     where email = '$email' or username= '$username' 
    ) t 

这使用max(),而不是limit当没有匹配处理的情况。在这种情况下,max()将返回NULL,所以前两个条件将失败。