Получение «лайки» привязаны к пользователям из базы данных

StackOverflow https://stackoverflow.com/questions/4010766

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

ID |. Имя 1 |. Боб 2 |. Салли

Заявление

ID |. Имя 1 |. Красный 2 |. Синий 3 |. Желтый

Нравится

UserID |. Andid 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 |. Имя |. UserID 2 |. Синий |. 1 1 |. Красный |. Null 3 |. Желтый |. 1.

Столбец USID указывает, что Bob любит запись или нет - нулевой нет, а значение да.

Другие советы

Предполагая, что у вас есть запечатывания таблиц с помощью столбца Entity_id (и все, что вы остальные, которые вы храните об объекте), а также вторые пользовательские номера таблицы, которые содержат столбцы 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

В этом примере записи.col1, записи.Col2. Отказ Отказ это список столбцов, которые вы хотите вернуться по записям. The: user_id - это параметр, который содержит идентификатор пользователя, который вы в настоящее время пытаетесь отображать записи. И последняя строка стоит в любых ограничениях, которые вы хотите поставить на записи, возвращаются.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top