Как я могу проверить, существует ли строка в нескольких таблицах с одним запросом? - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть три таблицы, в которых я хочу посмотреть, существует ли строка в любой из них.

Вот мои три запроса. Как я могу объединить их в один?

$dbh->prepare("SELECT id FROM users WHERE email = :email");
$dbh->prepare("SELECT id FROM employees WHERE email = :email");
$dbh->prepare("SELECT id FROM teachers WHERE email = :email");

if(!$row) { // If row not found
    // continue with registration
}

1 Ответ

1 голос
/ 08 апреля 2019

Вы можете использовать запрос UNION.Это вернет несколько строк, если у пользователя есть разные значения id в нескольких таблицах, но, поскольку вам нужно знать только одну или несколько строк, что хорошо.

SELECT id FROM users WHERE email = :email
UNION
SELECT id FROM employees WHERE email = :email
UNION
SELECT id FROM teachers WHERE email = :email

В качестве альтернативы вы можете использовать EXISTS выражение для получения простого результата «да / нет» из запроса:

SELECT EXISTS (SELECT * FROM users WHERE email = :email)
    OR EXISTS (SELECT * FROM employees WHERE email = :email)
    OR EXISTS (SELECT * FROM teachers WHERE email = :email)

Если вам интересно узнать, в какой таблице находится адрес электронной почты, вы можете изменить запрос UNION, чтобы получить эту информациюа также:

SELECT 'users' AS `table`, id FROM users WHERE email = :email
UNION
SELECT 'employees', id FROM employees WHERE email = :email
UNION
SELECT 'teachers', id FROM teachers WHERE email = :email
...