PHP/MySQL中的朋友系统?

ktr*_*oss 2 php mysql sql

我正在尝试写一个像这样工作的朋友系统:

  1. 用户A向用户B发送好友请求.
  2. 用户B接受来自用户A的好友请求.
  3. 用户A和B现在是朋友.

这是我的数据库结构:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(16) NOT NULL,
  `password` char(32) NOT NULL,
  `email` varchar(80) NOT NULL,
  `dname` varchar(24) NOT NULL,
  `profile_img` varchar(255) NOT NULL DEFAULT '/images/default_user.png',
  `created` int(11) NOT NULL,
  `updated` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
CREATE TABLE IF NOT EXISTS `friend_requests` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_a` int(11) NOT NULL DEFAULT '0',
  `user_b` int(11) NOT NULL DEFAULT '0',
  `viewed` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
CREATE TABLE IF NOT EXISTS `friends` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_a` int(11) NOT NULL DEFAULT '0',
  `user_b` int(11) NOT NULL DEFAULT '0',
  `friend_type` int(3) NOT NULL DEFAULT '1',
  `friends_since` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

我可以列出用户与朋友"SELECT*FROM朋友WHERE USER_A = $用户ID或USER_B = $用户ID",但我怎么能得到数据,如usernameprofile_imgusers表?

Chr*_*ård 9

我觉得你有点过分(!)你的问题了.

你可以只有一张User桌子和一张Friendship桌子.你的友谊表可以包含UserID int, FriendID int, Created_at datetime, Confirmed_at datetime.

select * from User
  left outer join Friendship on User.ID = Friendship.UserID
  left outer join User as Friend on Friendship.FriendID = Friend.ID
  where User.ID = <some users ID>
Run Code Online (Sandbox Code Playgroud)

编辑:我可能第一次亲自去过它;)

select * from Friendship
  inner join User on Friendship.FriendID = User.ID
  where Friendship.UserID = <some users ID>
Run Code Online (Sandbox Code Playgroud)

这会得到用户朋友......(MSSQL语法)

哦,我忘了.当Confirmed_atnull友谊,请求尚未证实.