Я сам взял на себя создание сайта, который позволяет пользователям добавлять друг друга в друзья и комментировать посты друг друга. После изучения этого я не уверен, как именно начать. У меня есть сообщения и таблица пользователей.
Мой вопрос: как бы я связал базы данных с
1.Проверьте, отправил ли пользователь A запрос на добавление в друзья пользователю B?
2. Сохранить значение, чтобы указать, что они друзья?
Я просмотрел этот сайт перед публикацией, но не могу понять, как это сделать. Уверен, я просто слишком усложняю это. Может ли кто-нибудь объяснить концепцию или как это работает?
Это можно сделать с помощью реляционной базы данных, и было бы целесообразно прочитать о том, как работают реляционные базы данных, например. 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
Других решений пока нет …