2012-02-12 7 views
0

私は、次の機能があります。チェック二つのテーブル

function login_check($email, $password) 
{ 
    $email  = mysql_real_escape_string($email); 
    $password = md5($password); 
    $login_query = mysql_query("SELECT COUNT(`id`) as `count`, `id` FROM `table_name` WHERE `email`='$email' AND `password`='$password'"); 

    return (mysql_result($login_query, 0) == 1) ? mysql_result($login_query, 0, 'id') : mysql_error(); 
} 

を私は私が誰のユーザーのために別のテーブルを作ったので、ユーザのログインが2つの異なるテーブルだけではなく、一つに正しいかどうかをチェックしたいです自分のサイトで自分のTwitterアカウントを認証しました。

+1

パスワードとメールが両方のテーブルに同じである必要がありますか?あなたの例では、1つのテーブル、1つの電子メール、1つのパスワードだけを使用しています。 –

+0

いいえ、それは.. – wadie

答えて

3

あなたは「ツイッターで認証」フラグを持っていますが、このようなものの両方を確認することができ、単一のテーブルを持つ方が良いと思います:

select exists(
    select 1 from table_name where email = '$email' and password = '$password' 
    union 
    select 1 from twitter_table where email = '$email' and password = '$password' 
) 

MySQLは(AKA真)あなたに1つを与えますテーブルのうちの少なくとも1つがあなたが探しているものを持っていて、どちらも一致していなければゼロ(AKA false)である。

select exists(select 1...)トリックを使用すると、データベースが一致を1つ見つけたり、クエリから返される前に一致するものがないことを知るためにインデックスをチェックするだけで、カウントよりも高速になります。

+0

本当ではありません。 1つのテーブルを持つ方が良いでしょうが、各テーブルには異なる行があります。どうやって両方のテーブルを1つのテーブルに入れることができますか?おかげさまで – wadie

+1

@wadie:他の表はどのように見えますか? –

+0

oauthの行を持つものはTwitterのテーブルです。 http://imgit.me/i/5h4m4V5.png http://imgit.me/i/4K5w6U8.png 最初のテーブルに2行追加するだけでいいですか? – wadie

0

あなたは両方のテーブルの結合ビューを作成することができます。

CREATE VIEW combined_accounts AS 
    (SELECT id, twitter_mail AS mail, password FROM twitter_accounts) 
    UNION 
    (SELECT id, mail, password FROM my_accounts);