#sql #postgresql
Вопрос:
Допустим, у меня есть база данных с таблицами пользователей и сообщений
CREATE TABLE users( id INT PRIMARY KEY, username string, ) CREATE TABLE posts( id INT PRIMARY KEY )
И я хочу, чтобы у пользователя была возможность сохранить сообщение, поэтому я создал две таблицы
CREATE TABLE user_saved_posts( id INT PRIMARY KEY, user_id INT NOT NULL REFERENCES users(id) ) CREATE TABLE saved_post( user_saved_post_id INT REFERENCES user_saved_posts(id), post_id INT REFERENCES posts(id) )
Что я хочу сделать, так это когда я показываю эти сообщения на интерфейсе, я показываю индикатор пользовательского интерфейса, который показывает, сохранена эта запись или нет
я думал о двух решениях, но не уверен, какое из них лучшее,
- Первый-сделать это на интерфейсе и сравнить каждый идентификатор записи с сохраненными,
SELECT post_id FROM saved_post WHERE user_saved_post_id=$1
но это решение было бы плохим, если у пользователя много сохраненных записей. - Второе-это прямая проверка из базы данных
SELECT p.body,(SELECT ( case when exists (SELECT post_id FROM WHERE users_saved_posts = $1 AND post_id = p.id) then true else false end ) as is_post_saved) FROM posts p
Я думаю, что второе решение лучше, надеюсь, у вас есть идеи получше моих, Так что вы думаете?
Комментарии:
1. Примечание: результатом
EXISTS(...)
является логическое значение, поэтому вам не нужноCASE ...
выражение. Также:create table
использует()
, не{}
2. Вы должны указать, какую технологию пользовательского интерфейса вы используете. Обычно существуют способы отображения в пользовательском интерфейсе после успешного завершения вашего запроса на сохранение записи в БД. Например, вы получите возвращаемое значение или код ответа после успешного завершения операции с базой данных.
3. @ChinmayT Я уже сделал то, что вы сказали, я показываю индикатор, когда нажимаю кнопку «сохранить сообщение» и проверяю код ответа, я хочу показать индикатор, если сообщение сохранено при повторной загрузке сообщения, я использую react кстати