Как моделировать дружеские отношения - PullRequest
3 голосов
/ 06 октября 2011

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

Я имеюполучил две таблицы, users_status и friendships.

В таблице users_status у меня есть поле userid и несколько других.В таблице friendships у меня есть поля request_to, request_from и friendship_status.

В основном я хочу получить все статусные сообщения от текущего пользователя И тех, ктоявляются друзьями текущего пользователя (который я могу указать в своем PHP, используя переменную $ userid).

Вот пример структуры таблицы friendships.Когда отправляется запрос на добавление в друзья, идентификатор пользователя отправителя и получателя помещается в таблицу, а значение Friends_status равно 0. Когда запрос принимается, для значения Friends_status устанавливается значение 1, и эти двое теперь являются друзьями.*

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

Возможно, будет лучшеиметь две отдельные таблицы для friend_requests и friendships?Если да, то как бы я структурировал / управлял таблицей friendships?

Ответы [ 2 ]

4 голосов
/ 06 октября 2011

Вы можете использовать объединение таблиц (например, http://dev.mysql.com/doc/refman/5.0/en/join.html), чтобы найти все запросы.

На самом деле вы можете использовать подзапрос здесь:

SELECT * FROM users_status WHERE userid = "$userid" 
    OR userid in (SELECT request_to   FROM friendships where request_from = "$userid" AND friendship_status = 1)
    OR userid in (SELECT request_from FROM friendships where request_to   = "$userid" AND friendship_status = 1)

replace $userid с вашим идентификатором пользователя

3 голосов
/ 06 октября 2011

Самая простая схема, которую я могу придумать:

PENDING_FRIENDSHIPS(request_from, request_to)
FRIENDSHIPS(request_from, request_to)

Я также удалил идентификатор, поскольку оба поля в обеих таблицах будут составными первичными ключами (request_from, request_to).

Toполучить всех друзей от текущего пользователя просто запустите:

select * from friendships
where $currentUser = request_from OR $currentUser = request_to

Это вернет оба столбца, и вам придется удалить в PHP текущего пользователя.

Другой способ получить всех друзей из этогоСхема для запуска UNION:

select request_from from friendships
where request_to = $currentUser
UNION
select request_to from friendships
where request_from = $currentUser

Недостатком этого решения является то, что вы запускаете 2 выбора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...