嗨,我一直在开发一个简单的 php mysql 好友列表后端。用户的 friend 和 friend 列表以及 friend 请求列表是从 1 个表“ friend ”生成的。以下是好友表中的列:
id user_id friend_user_id is_confirmed date_created
id
是不言自明的唯一
自动增量
int
值。
user_id
是最初发送好友请求的用户的唯一 ai
int
值。
friend_user_id
是接收好友请求的用户的唯一
ai
int
值。
is_confirmed
是一列,只能有2个值0和1。如果is_confirmed = 0
,则好友请求尚未被用户接受
使用指定的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');
}
}
我可以做什么来解决这个问题? 任何帮助将不胜感激。抱歉文字量太大。
最佳答案
如果这是某种单向向量,其中 A 是 B 的 friend ,但 B 必须确认 A 是 friend ,那么您必须在正确的配对中插入一对条目,一个已确认,一个未确认。与许多有方向性的事物一样,您很容易混淆配对,将事物反向连接。
要显示由给定用户发起的待处理的好友请求:
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
要显示特定用户的 friend :
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
。
关于php mysql 查询,如果用户 ID 作为好友退出,则删除好友请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24154205/