0

このコードは、$username と $email が置き換えられる PHP 変数に記述しています。これを画面にエコーすると、正しく見えました。私が常に返す唯一の結果は「許容可能」であるため、MySQL コードに問題があると想定しています。何か助けはありますか?

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;
4

1 に答える 1

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ため、最初の 2 つの条件は失敗します。

于 2013-07-02T19:49:39.910 に答える