Стратегия включения лайков, не позволяя пользователям "мульти-лайк" использовать MySQL - PullRequest
0 голосов
/ 02 мая 2020

У меня есть веб-сайт, который должен включать лайки, в то же время не позволяя любому пользователю ставить лайк несколько раз. Я использую React, Express и MySql. На этом веб-сайте есть страница, где пользователь может просматривать все сообщения, где каждая запись включает: (1) сообщение, (2) пользователя, создавшего сообщение, и (3) сколько лайков может иметь это сообщение. Это была тривиальная команда SQL, в которой я выполнил следующий запрос:

SELECT users.username, posts.message, posts.likes
FROM users
INNER JOIN posts
WHERE users.user_id = posts.post_id

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

Я знаю, что я справа отслеживать создание таблицы «лайков», поскольку у меня не может быть повторяющихся записей. Мне нужен запрос, в котором я могу получить список всех сообщений, которые понравились пользователю, а также тех, которые ему не понравились. Я знаю, что это можно получить с помощью ЛЕВОГО или ПРАВОГО СОЕДИНЕНИЯ между таблица «сообщения» и таблица «лайки». Тем не менее, с помощью этого списка результатов, как я могу различить guish, какие публикации понравились пользователю и те, которые ему не понравились, так что, когда я отображаю () в этом списке, я могу легко разместить кнопку «Нравится», если пользователю не понравился пост или непохоже, если пользователю не понравился пост?

Вот моя SQL схема:

Users Table (user_id, username, password) //Primary Key: user_id
Posts Table (post_id, message, likes) //Primary Key: post_id 
Likes Table (user_id, post_id) //Primary Keys: user_id, post_id and Foreign Keys: user_id, post_id 

1 Ответ

1 голос
/ 02 мая 2020

Соединение слева likes с posts на общем post_id и идентификатором соответствующего пользователя. Затем проверьте, если l.user_id IS NOT NULL. Если и только это так, то этот пост понравился пользователю.

SELECT p.*,
       l.user_id IS NOT NULL liked
       FROM posts p
            LEFT JOIN likes l
                      ON l.post_id = p.post_id
                         AND l.user_id = ?;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...