Создание таблицы друзей SQL для хранения

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

Мой вопрос: как бы я связал базы данных с
1.Проверьте, отправил ли пользователь A запрос на добавление в друзья пользователю B?
2. Сохранить значение, чтобы указать, что они друзья?

Я просмотрел этот сайт перед публикацией, но не могу понять, как это сделать. Уверен, я просто слишком усложняю это. Может ли кто-нибудь объяснить концепцию или как это работает?

-3

Решение

Это можно сделать с помощью реляционной базы данных, и было бы целесообразно прочитать о том, как работают реляционные базы данных, например. https://www.youtube.com/watch?v=NvrpuBAMddw

Но — чтобы дать некоторые указатели, похоже, что вы хотите, чтобы ваша реляционная база данных позволяла выполнять следующие функции:

  • количество пользователей
  • серия сообщений определенных пользователей
  • ряд отношений между пользователями
  • способность проверить отношения до того, как они будут подтверждены
  • серия сообщений определенных пользователей
  • ряд комментариев «пост-пост» к постам

1) Начнем с раздела «запрос в друзья».

Для этого вам понадобится а) целая нагрузка на разных пользователей и б) нагрузка на отношения между этими пользователями.

Вы должны представить это в 2 разных таблицах — так что создайте users таблица со следующими полями:

UserID, name, age, [details, password, address etc etc]

а затем friends таблица, которая имеет эти поля:

friendID, userID1, userID2, [date, confirmed]

Ваша пользовательская таблица может выглядеть так:

 UserID,  name,     age,
1      Fred      18
2     George     24
3     Michael    20
4     Alice      24
5     Sophie     20
6     George     19

Допустим, Майкл хочет подружиться с Алисой и Фредом, а Алиса хочет подружиться с Софи — вы бы хотели создать записи в таблице ваших друзей, которые выглядят так:

 FriendID, userID1,                            userID2,
1         3  (this refers to Michael)         4 (this refers to Alice)
2         3  (this refers to Michael)         1 (this refers to Fred)
3         4  (this refers to Alice)           5 (this refers to Sophie)

Так что, если вы тогда искали друзей Майкла — вы бы сделали запрос, который искал:

 every record from the friend table where userID1 = Michael's userID.

From the userID2 field, you'd get userID 4 and userID 1

By looking up those userids in the user table, you'd find more details for Alice and Fred.

Вы должны сделать этот запрос, чтобы проверить, является ли userID1 ИЛИ ЖЕ userid2 = идентификатор пользователя, который вам нужен, так что вы получите те же результаты, если, например, стол выглядел немного иначе:

 FriendID, userID1,                            userID2,
1         3  (this refers to Michael)         4 (this refers to Alice)
2         1  (this refers to Fred)            3 (this refers to Michael)
3         4  (this refers to Alice)           5 (this refers to Sophie)

Otherwise you'd only know about Alice.. but you want to know about Fred too.

2) Если вы хотите подтвердить связь, вы можете добавить поле «подтверждено» в таблицу друзей — установите его в двоичное 0 = не подтверждено / 1 = подтверждено.

Когда запрашивается дружба, вы добавляете запись в таблицу, но когда она подтверждается, вы обновляете поле «подтверждено» для этой записи до 1.

Давайте обновим нашу таблицу друзей соответственно:

 FriendID, userID1,               userID2,     confirmed
1         3  (Michael)         4 (Alice)      0
2         3  (Michael)         1 (Fred)       1
3         4  (Alice)           5 (Sophie)     1

Если вы хотите увидеть всех друзей, ожидающих одобрения Майкла, вы должны искать:

  any records from the friends table where userid1 = 3
AND confirmed = 0 ... which means it hasn't been accepted yet.

Это показало бы, что Алиса еще не была принята как друг Майклом.

Если вы хотите увидеть всех друзей, которых запросил пользователь, но которые не были приняты, вы должны искать:

  any records from the friends table where userid2 = the user you're looking for
AND confirmed = 0 ... which means it hasn't been accepted yet.

Если вы хотите увидеть всех принятых друзей, переключите «подтверждено» на 1.

3) Вы также хотели иметь сообщения для каждого пользователя … так что вам понадобится posts таблица с полями для:

postid, userid, date, content

У нас уже есть ваша таблица пользователей, так что, допустим, Майкл хотел опубликовать кое-что. Таблица сообщений может выглядеть так:

postid, userid,          date               content
1       3 (Michael)    [auto datetime]     Hi everyone
2       3 (Michael)    [auto datetime]     This is my second post

Теперь у вас есть отношения между Майклом и таблицей сообщений. Если другой пользователь что-то опубликовал, он добавил бы еще одну строку с другим идентификатором пользователя. Затем вы можете получить все сообщения из таблицы сообщений, где ID пользователя = 3, который является идентификатором пользователя Майкла.

4) Для добавления комментариев к сообщениям вам понадобится таблица комментариев, которая может выглядеть следующим образом:

commentid, postid,          userid               content
1           1               3 (Michael)         Michael is commenting on his own first post...
2           2               4 (Alice)           Alice is saying something on Michael's second post
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]