如何在PHP中创建add-friend/defriend函数?

如何在PHP中创建add-friend/defriend函数?,php,mysql,Php,Mysql,我已经创建了一个网站,人们可以在这里创建个人资料。但我正试图找出如何开始制作一个添加好友按钮,这样用户就可以拥有好友 在我的用户表中,我有用户id、名字、姓氏、电子邮件等 我是否应该以某种方式将用户的用户id和朋友表中的朋友关联起来 我是编程新手,所以这些东西对我来说还是新鲜事。谢谢 类似这样: create table users( user_id int unsigned not null auto_increment primary key, username varbinary(32

我已经创建了一个网站,人们可以在这里创建个人资料。但我正试图找出如何开始制作一个添加好友按钮,这样用户就可以拥有好友

在我的用户表中,我有用户id、名字、姓氏、电子邮件等

我是否应该以某种方式将用户的用户id和朋友表中的朋友关联起来

我是编程新手,所以这些东西对我来说还是新鲜事。谢谢

类似这样:

create table users(
 user_id int unsigned not null auto_increment primary key,
 username varbinary(32) not null
)engine=innodb;


create table user_friends(
 user_id int unsigned not null,
 friend_user_id int unsigned not null,
 primary key (user_id, friend_user_id)
)engine=innodb;
要显示用户的朋友集,请执行以下操作:

select
 u.*
from
 user_friends uf
inner join users u on uf.friend_user_id = u.user_id
where
 uf.user_id = 1;
大概是这样的:

create table users(
 user_id int unsigned not null auto_increment primary key,
 username varbinary(32) not null
)engine=innodb;


create table user_friends(
 user_id int unsigned not null,
 friend_user_id int unsigned not null,
 primary key (user_id, friend_user_id)
)engine=innodb;
要显示用户的朋友集,请执行以下操作:

select
 u.*
from
 user_friends uf
inner join users u on uf.friend_user_id = u.user_id
where
 uf.user_id = 1;

好吧,让我们尽量保持简单。 实际上,您正在尝试找到一种将两个用户连接在一起的方法

由于我试图让事情简单化,并且绝对不意味着这是最好的方法,我认为最简单的方法是创建一个新表(users\u friends),其中包含以下字段:(user\u id)和(friend\u id)

假设我的用户id是5。 您的用户id是10

我想将您添加为我的朋友,因此我将使用以下值向新创建的表中添加一个条目: 用户id=5,朋友id=10

假设要显示我的所有好友,可以运行如下查询:

SELECT * FROM `users` WHERE `user_id` IN ( SELECT `friend_id` FROM `users_friends` WHERE `user_id` = '5' );
当然,删除朋友很容易,你所要做的就是从新创建的表中删除条目

DELETE FROM `users_friends` WHERE `user_id` = '5' AND `friend_id` = '10';
噗,你突然不再是我的朋友了;)

所以,是的,这些是基础。
我会先尝试这个解决方案,然后再转向一个可以让您更灵活的解决方案。

好吧,让我们尽量保持简单。 实际上,您正在尝试找到一种将两个用户连接在一起的方法

由于我试图让事情简单化,并且绝对不意味着这是最好的方法,我认为最简单的方法是创建一个新表(users\u friends),其中包含以下字段:(user\u id)和(friend\u id)

假设我的用户id是5。 您的用户id是10

我想将您添加为我的朋友,因此我将使用以下值向新创建的表中添加一个条目: 用户id=5,朋友id=10

假设要显示我的所有好友,可以运行如下查询:

SELECT * FROM `users` WHERE `user_id` IN ( SELECT `friend_id` FROM `users_friends` WHERE `user_id` = '5' );
当然,删除朋友很容易,你所要做的就是从新创建的表中删除条目

DELETE FROM `users_friends` WHERE `user_id` = '5' AND `friend_id` = '10';
噗,你突然不再是我的朋友了;)

所以,是的,这些是基础。
我会先尝试这个解决方案,然后再转向一个可以让您更灵活的解决方案。

补充f00和Isaac的答案:

  • 基本伪代码如下所示:
  • 在您的个人资料页面中有按钮/URL(可能是$memberid)。让我们称之为“交朋友”
  • 然后,makefriend.php将从该特定配置文件页面检查memberid
  • php也将从请求者处获取requesterid(这通常保存在会话中)。
    • 如果为空,则可能未登录
  • 接下来,makefriend.php将把memberid和requesterid插入friendlist

  • 要补充f00和Isaac的回答:

  • 基本伪代码如下所示:
  • 在您的个人资料页面中有按钮/URL(可能是$memberid)。让我们称之为“交朋友”
  • 然后,makefriend.php将从该特定配置文件页面检查memberid
  • php也将从请求者处获取requesterid(这通常保存在会话中)。
    • 如果为空,则可能未登录
  • 接下来,makefriend.php将把memberid和requesterid插入friendlist

  • 实际上,我创建了一个friends表,其中包含user1和user2的值。每当发送好友请求时,user2是请求者,user1是被请求者。这使得了解跟随者和实际跟随者更加容易。。。。。user2是跟随者,user1是跟随者。因此,如果您的用户名属于user1,则表示您正被user2跟踪,如果您的用户名属于user2,则表示您正在跟踪user1。。。。。这对你来说容易多了。您可以从friends表中进行选择,其中user1=您的userid或user2=您的userid,从而获得您的好友。如果user1=您的userid,则user2是您的朋友;如果user2=您的userid,则user1是您的朋友。您可以将其存储在数组中。然后,您可以找到每个阵列的用户详细信息。希望你能理解? 您只需删除以下列,即可添加或删除好友:user1=您的userid和user2=您的friendid或user1=您的friendid和user2=您的userid。。。。。很简单

    如果你要求 通过以下方式请求朋友: 将值(“”,$yourfriendid,$youruserid,'0')插入到朋友(id、user1、user2、accepted)中

    如果有人要求你, 申请将通过以下方式提出: 将值(“”,$youruserid,$yourfriendid,'0')插入到朋友(id、user1、user2、accepted)中

    一旦请求被接受,接受列将变为一(1)而不是零(0)。您所需要做的就是在user1接受好友后,通过设置accepted=1来更新列

    解除朋友关系: 只需删除包含您的userid和您的friendid的行,将其作为user1或user2

    阻止朋友:
    您可能需要另一个表,以便添加被阻止用户的列表。。。。但是,如果您熟悉json_encode和json_decode函数,那么将被阻止的用户存储到一个数组中会更容易。您只需使用json_encode将该数组保存到数据库中即可。您可以从数据库获取数组,使用json_decode将其转换为真实数组,然后可以删除任何被阻止的用户,或者在保存回数据库之前将新被阻止的用户添加到该数组中。。。。这可能会节省空间。因此,所有被阻止的用户都将位于包含用户ID的一行中

    我实际上创建了一个friends表,其中包含user1和user2的值。无论何时发送好友请求,user2都是请求者