您好我一直在研究一个简单的php mysql朋友列表后端。从1个表,朋友生成用户的朋友和朋友列表和朋友请求列表。以下是朋友表中的列:
id user_id friend_user_id is_confirmed date_created
id
是自解释unique
auto increment
int
值。
user_id
是最初发送好友请求的用户的唯一ai
int
值。
friend_user_id
是接收好友请求的用户的unique
ai
int
值。
is_confirmed
是一个只能有2个值0和1的列。如果is_confirmed = 0
,则user
的{{1}}未接受好友请求specified friend_user_id
,该行仅显示在朋友请求部分中。当朋友请求被接受is_confirmed = 1
并且该行应仅显示在朋友部分下。
由于某种原因,一旦接受好友请求,初始好友请求和新好友都在显示。显然,如果你已经是朋友,那么不应该是朋友请求。
下面是我的代码,用于显示朋友和朋友请求。
function displayFriends($userid){
$result = query2("SELECT u.id, u.username
FROM users AS u
INNER JOIN friends AS f ON f.friend_user_id = u.id
WHERE (f.user_id ='%s' AND f.is_confirmed=1)", $userid);
if (!$result['error']) {
print json_encode($result);
} else {
errorJson('no friends');
}
}
function displayFriendRequests($userid){
$result = query2("SELECT u.id, u.username
FROM users AS u
INNER JOIN friends AS f ON f.user_id = u.id
WHERE f.friend_user_id ='%s' AND f.is_confirmed=0", $userid);
if (!$result['error']) {
print json_encode($result);
} else {
errorJson('no event data');
}
}
我该怎么做才能解决这个问题? 任何帮助将不胜感激。抱歉有大量的文字。
答案 0 :(得分:0)
如果这是某种单向向量,其中A朋友B但B必须确认A为朋友,那么您必须在正确的配对中插入一对条目,一条已确认,一条未经证实。与很多方向性的东西一样,你很容易让你的配对混乱,向后连接。
显示由给定用户发起的待处理的好友请求:
SELECT users.id, users.username
FROM friends
INNER JOIN users ON users.id=friends.friend_user_id
WHERE friends.user_id=? AND f.is_confirmed=0
要显示特定用户的朋友:
SELECT users.id, users.username
FROM friends
INNER JOIN users ON users.id=friends.user_id
WHERE friends.friend_user_id=? AND f.is_confirmed=1
我假设发起人是user_id
而收件人是friend_user_id
。