@iXelper

Как соотнести id клиентов рандомным образом?

Доброго времени суток всем! У меня есть база с клиентами, у которых есть свой id, мне надо сопоставить этих клиентов так, чтобы при значении "поиск" они могли находить себе пару и при этом исключить случаи, чтоб два клиента одновременно получили id одного и того же человека.
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
@dzhebrak
Можно сделать, к примеру, следующим образом.

Создать таблицу для клиентов и заполнить ее данными:

CREATE TABLE clients (id INTEGER NOT NULL);
INSERT INTO clients (id) VALUES (1), (2), (3), (4), (5);

Создать таблицу, в которой будут храниться группы клиентов:
CREATE TABLE clients_groups (
  first_client_id INTEGER NOT NULL UNIQUE, 
  second_client_id INTEGER NOT NULL UNIQUE,
  FOREIGN KEY (first_client_id) REFERENCES clients (id) ON DELETE CASCADE ON UPDATE NO ACTION,
  FOREIGN KEY (second_client_id) REFERENCES clients (id) ON DELETE CASCADE ON UPDATE NO ACTION,
  CHECK(first_client_id != second_client_id)
);

Теперь чтобы выбрать идентификатор свободного клиента (т.е., который не участвует ни в одной из групп) нужно выполнить запрос:
SELECT id FROM clients c
WHERE 
  c.id NOT IN(SELECT first_client_id FROM clients_groups) AND 
  c.id NOT IN(SELECT second_client_id FROM clients_groups)
ORDER BY RANDOM()
LIMIT 1;

И соответственно добавить новую группу из этих двух клиентов в таблицу clients_groups.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы