Получение "лайков", привязанных к пользователям из базы данных
Я новичок в структуре базы данных. Я пытаюсь создать приложение, которое позволяет пользователям ставить лайки определенным записям, но я хочу иметь возможность привязывать лайки к пользователям, чтобы я мог изменять визуальные эффекты до / после аналогичного действия.
Из исследований я думаю, что у меня должна быть таблица "записей" и "пользователей", а затем таблица "лайков", которая связывает их друг с другом.
Единственное, в чем я не уверен, это когда я получаю и показываю содержимое... как бы я писал запросы? Если я запрашиваю все записи, которые мне нужны, могу ли я вернуться и индивидуально запросить каждую из них, чтобы увидеть, не привязана ли она к ней для текущего пользователя? Кажется, это может быть дорогостоящей операцией. Есть ли более эффективный способ?
Надеюсь, что это имеет смысл, спасибо.
3 ответа
Я думаю, что вы имеете в виду правильный дизайн базы данных. Что касается запросов, предположим, что таблицы таковы:
пользователей
ID | название 1 | боб 2 | Салли
Записи
ID | название 1 | красный 2 | синий 3 | желтый
Нравится
UserID | EntryID 1 | 1 1 | 2 2 | 2 2 | 3
Можно сказать, что Боб любит красный и синий, а Салли любит синий и желтый. Таким образом, запрос для извлечения всех записей плюс индикатор того, что любит Боб:
SELECT
e.ID,
e.Name,
l.UserID
FROM Entries e LEFT JOIN Likes l ON l.EntryID = e.ID
WHERE l.UserID = 1 -- Bob's User ID
ORDER BY e.Name
Это вернется
ID | Имя | Идентификатор пользователя 2 | Синий | 1 1 | Красный | НОЛЬ 3 | Желтый | 1
Столбец UserID указывает, нравится ли Бобу запись или нет - NULL - Нет, а значение - Да.
Предполагая, что у вас есть таблица Entries со столбцом entity_id (и всем, что вы храните о сущности) и вторая таблица UserLikes, которая содержит столбцы user_id и entity_id, вы должны сделать следующее:
SELECT Entries.col1, Entries.col1 . . ., UserLikes.user_id
FROM Entries LEFT OUTER JOIN UserLikes ON
Entries.entity_id = UserLikes.entity_id
WHERE UserLikes.user_id = :user_id
AND Entity.col_whatever = :whatever
В этом примере Entries.col1, Entries.col2 .,, список столбцов, о которых вы хотите узнать о записях.: User_id - это параметр, который содержит идентификатор пользователя, для которого вы сейчас пытаетесь отобразить записи. И последняя строка заменяет любые ограничения, которые вы хотите наложить на Записи.
Этот запрос даст вам строку для каждой записи, которую вы искали. Вы можете проверить значение возвращаемого столбца user_id. Если он равен NULL, то он не понравился пользователю, если он содержит идентификатор пользователя, он понравился пользователю.
Я думаю, что вы можете извлечь записи и запросить таблицу лайков одновременно, чтобы получить, если текущий пользователь любит запись, выполняющую хранимую процедуру. Таким образом, вы можете контролировать значение набора данных, возвращаемых запросом, например, возвращая один столбец для текста записи и один логический столбец для оценки лайков текущего пользователя... Таким образом, вы получите хотя бы один параметр для хранимой процедуры указать, кто является текущим пользователем
Я надеюсь, что эта идея поможет вам...