Как выбрать из таблицы и сразу присоединиться к ней со списком в MySQL - PullRequest
1 голос
/ 15 февраля 2012

Я надеюсь сделать что-то вроде:

SELECT client.id FROM client RIGHT JOIN ('no@such.com', 'a@b.com', ...);

У меня есть следующая таблица "client":

id   email
1    a@b.com
2    c@d.com

Пользователь вводит список адресов электронной почты, которые он хочетпригласить, и мне нужно получить следующий результат:

email_to_invite  client.id
no@such.com      NULL
a@b.com          1

, чтобы я знал, кто уже находится в БД (и получает сообщение с внутренней системой сообщений), и кого мне нужно пригласить по электронной почте(client.id IS NULL)

РЕШЕНИЕ: (Спасибо Джо Стефанелли)

Сначала я должен был предоставить разрешение CREATE TEMPORARY TABLES моему пользователю

CREATE TEMPORARY TABLE email (email VARCHAR(255));
INSERT INTO email VALUES ('no@such.com'), ('a@b.com');
SELECT e.email, c.id FROM email e LEFT JOIN client c ON e.email=c.email;

Ответы [ 3 ]

2 голосов
/ 15 февраля 2012

Поместите список пользователей во временную таблицу и присоединитесь к ней.

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

Можно предположить, что эти люди могут присоединиться, поэтому создайте для них записи о клиентах, если они не существуют.

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

INSERT IGNORE INTO client (email, is_member) VALUES ('no@such.com', false);
INSERT IGNORE INTO client (email, is_member) VALUES ('a@b.com', false);

Затем, чтобы получить приглашения, просто:

SELECT *
FROM client
WHERE is_member = false
  AND email IN ('no@such.com', 'a@b.com')

Вы можете расширить это, чтобы избежать отправки нескольких приглашений или ограничить количество приглашений. Если это социальный сайт, вы также можете строить отношения между клиентами и не членами, поэтому вы можете рекомендовать подключения, как только кто-то зарегистрируется. Моя точка зрения заключается в том, что существуют преимущества хранения адресов электронной почты для пользователей, не являющихся участниками этих задач.

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

Чтобы найти клиентов, которых нет в списке адресов электронной почты, вы можете сделать следующее:

SELECT client.id FROM client WHERE email NOT IN ('no@such.com', 'a@b.com')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...