在一个查询中检查两个表

时间:2012-02-12 00:49:34

标签: php mysql sql phpmyadmin

我有以下功能:

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();
}

我希望它检查用户登录是否在两个不同的表中是正确的,因为我已经为使用我的站点验证了他们的Twitter帐户的用户创建了另一个表。

2 个答案:

答案 0 :(得分:3)

您最好使用一个“使用Twitter验证”标志的表格,但您可以使用以下内容检查两者:

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为真),如果两个表都没有匹配,则为零(AKA为假)。

使用select exists(select 1...)技巧也比计数更快,因为数据库只需要找到一个匹配项或检查索引,以便在从查询返回之前知道没有匹配项。

答案 1 :(得分:0)

您可以创建两个表的联合视图:

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