我正在尝试写一个像这样工作的朋友系统:
这是我的数据库结构:
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",但我怎么能得到数据,如username或profile_img从users表?
我觉得你有点过分(!)你的问题了.
你可以只有一张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_at被null友谊,请求尚未证实.