【发布时间】:2010-03-30 03:59:53
【问题描述】:
我创建了一个网站,人们可以在其中创建个人资料。但我试图弄清楚如何开始制作添加朋友按钮,以便用户可以拥有朋友。
在我的用户表中,我有 user_id、first_name、last_name、email 等。
我应该以某种方式将用户的 user_id 和朋友表中的朋友联系起来吗?
我是编程新手,所以这些东西对我来说仍然是新事物。谢谢!
【问题讨论】:
我创建了一个网站,人们可以在其中创建个人资料。但我试图弄清楚如何开始制作添加朋友按钮,以便用户可以拥有朋友。
在我的用户表中,我有 user_id、first_name、last_name、email 等。
我应该以某种方式将用户的 user_id 和朋友表中的朋友联系起来吗?
我是编程新手,所以这些东西对我来说仍然是新事物。谢谢!
【问题讨论】:
好吧,让我们尽量保持简单。 本质上,您正在尝试找到一种将两个用户联系在一起的方法。
由于我试图让事情保持简单,并且绝对不是暗示这是最好的方法,我认为这样做最简单的方法是创建一个新表(users_friends) 包含以下字段:(user_id) 和 (friend_id)。
好吧,假设我的 user_id 是 5。 你的 user_id 是 10。
我想将您添加为我的朋友,因此我将使用以下值向该新创建的表中添加一个条目: user_id = 5,friend_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';
噗,你突然不再是我的朋友了;)
是的,这些是基础知识。 我会先尝试这个解决方案,然后再继续使用可以让您更灵活的解决方案。
【讨论】:
user_id FROM users_friends WHERE friend_id = '5'
类似这样的:
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;
【讨论】:
补充 f00 和 Isaac 的答案:
【讨论】:
我实际上创建了一个保存 user1 和 user2 值的朋友表。每当发送好友请求时,user2 是请求者,而 user1 是被请求者。这使得了解关注者和实际关注的人变得更加容易...... user2 是关注者,而 user1 是关注者。因此,如果您的用户名属于 user1,则意味着您正在被 user2 关注,如果您的用户名属于 user2,则意味着您正在关注 user1..... 这对您来说更容易。您可以通过从好友表中选择 user1 = 您的用户 ID 或 user2 = 您的用户 ID 来获得您的朋友。如果 user1 = your userid 那么 user2 是你的朋友 elseif user2 = your userid 那么 user1 是你的朋友。您可以将其存储在数组中。然后对于每个阵列,您可以找到他们的用户详细信息。希望你能理解? 您可以通过简单地删除 user1=your userid and user2=yourfriendid 或 user1=yourfriendid and user2=your userid 的列来添加删除朋友.....非常简单。
如果您要求 通过以下方式请求朋友: 插入好友(id,user1,user2,accepted) values(' ', $yourfriendid,$youruserid,'0');
如果有人要求您, 请求将由: 插入好友(id,user1,user2,accepted) values(' ',$youruserid,$yourfriendid,'0');
一旦请求被接受,接受的列变为一 (1) 而不是零 (0)。您需要做的就是在好友被 user1 接受后通过设置accepted=1 来更新列。
解除好友关系: 只需将包含您的用户 ID 和您的朋友 ID 的行删除为 user1 或 user2。
屏蔽朋友: 您可能需要另一个表,您可以在其中添加被阻止的用户列表....但是,如果您熟悉 json_encode 和 json_decode 函数,将被阻止的用户存储到一个数组中会更容易,您只需使用保存该数组json_encode 到您的数据库中。您可以从数据库中获取数组,使用 json_decode 将其转换为真实数组,然后您可以删除任何被阻止的用户或将新阻止的用户添加到该数组中,然后再保存回您的数据库......这可能会节省空间。因此,您所有被阻止的用户将仅位于包含您的用户 ID 的一行中。
【讨论】: