sql - Создание записей для каждого друга после принятия запроса на добавление в друзья - PullRequest
0 голосов
/ 26 мая 2018

Я новичок в SQL и с Postgres я пытаюсь создать систему друзей, используя три таблицы.Таблица пользователей, таблица запросов на добавление в друзья и таблица друзей, в которой будут храниться отношения пользователей после их принятия.

Таблица запросов на добавление в друзья

id
sender_id
recipient_id

Таблица друзей

id
user_id
friend_id

В настоящее время я пытаюсь написать несколько sql таккак только запрос на добавление в друзья принят, соответствующая запись запроса в таблице запросов на добавление в друзья удаляется, затем две записи вставляются в таблицу друзей для дружбы.Один для каждого пользователя.Итак, АБ и БА.

Я пробовал запросы по порядку, но мне не повезло.

WITH friend_request AS (
      DELETE FROM friend_requests
          WHERE id = friendrequestid
          RETURNING sender_id, recipient_id
         )
INSERT INTO user_friends (user_id, friend_id) 
    (SELECT sender_id, recipient_id FROM friend_request),
    (SELECT recipient_id, sender_id FROM friend_request);

Есть ли правильный способ сделать две вставки так, как я пытаюсь?Или я неправильно к этому подхожу?

Заранее спасибо.

1 Ответ

0 голосов
/ 26 мая 2018

Я думаю, что вы хотите union all:

WITH friend_request AS (
      DELETE FROM friend_requests
          WHERE id = friendrequestid
          RETURNING sender_id, recipient_id
     )
INSERT INTO user_friends (user_id, friend_id) 
    SELECT sender_id, recipient_id FROM friend_request
    UNION ALL
    SELECT recipient_id, sender_id FROM friend_request;

Лично я бы вставил новые значения перед их удалением, но ваш подход в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...