Проверьте две таблицы в одном запросе - PullRequest
0 голосов
/ 12 февраля 2012

У меня есть следующая функция:

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 ]

3 голосов
/ 12 февраля 2012

Было бы лучше с одной таблицей, которая имеет флаг "аутентифицировано с помощью 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 true) если хотя бы одна из таблиц имеет то, что вы ищете, и ноль (AKA false), если ни у одной из них нет совпадения.

Использование трюка select exists(select 1...) также будет быстрее, чем подсчет только как базы данныхнужно найти одно совпадение или проверить индексы, чтобы узнать, что совпадений нет, прежде чем он вернется из запроса.

0 голосов
/ 12 февраля 2012

Вы можете создать объединенное представление обеих таблиц:

CREATE VIEW combined_accounts AS
  (SELECT id, twitter_mail AS mail, password FROM twitter_accounts)
  UNION
  (SELECT id, mail, password FROM my_accounts);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...