Получение «лайков», привязанных к пользователям из базы данных - PullRequest
0 голосов
/ 25 октября 2010

Я новичок в структуре базы данных. Я пытаюсь создать приложение, которое позволяет пользователям лайкать определенные записи, но я хочу иметь возможность привязывать лайки к пользователям, чтобы я мог изменять визуальные эффекты до / после действия лайка.

Я думаю из исследования, что у меня должна быть таблица «записей» и «пользователей», а затем таблица «лайков», которая связывает их друг с другом.

Единственное, в чем я не уверен, это когда я получаю и показываю содержимое ... как бы я писал запросы? Если я запрашиваю все записи, которые мне нужны, могу ли я вернуться и индивидуально запросить каждую из них, чтобы увидеть, не привязано ли к ней подобное для текущего пользователя? Кажется, это может быть дорогостоящей операцией. Есть ли более эффективный способ?

Надеюсь, это имеет смысл, Спасибо.

Ответы [ 3 ]

1 голос
/ 25 октября 2010

Предполагая, что у вас есть таблица 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, то он не понравился пользователю, если он содержит идентификатор пользователя, он понравился пользователю.

1 голос
/ 25 октября 2010

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

Пользователи

ID | Name
1  | Bob
2  | Sally

Записи

ID | Name
1  | Red
2  | Blue
3  | Yellow

Любит

UserID | EntryID
1      | 1
1      | 2
2      | 2
2      | 3

Так что можно сказать, что Боб любит красный и синий, а Салли любит синий и желтый. Таким образом, запрос для извлечения всех записей плюс индикатор того, что нравится Bob :

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 | Name   | UserID
2  | Blue   | 1
1  | Red    | NULL
3  | Yellow | 1

Столбец UserID указывает, нравится ли Бобу запись или нет - NULL - Нет, а значение - Да.

0 голосов
/ 25 октября 2010

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

Надеюсь, эта идея поможет тебе ...

...