2016-04-03 16 views
3

我想为Android开发一个社交网络应用程序,用户可以发送友情请求并接受相同的请求。我已经实现了。用户可以发送请求给别人这样的:选择待处理的请求(Friendship Restful Api)PHP和MySql

用户表(用户)

id            
name 
email 
... 

关系表(关系)

user_one_id - id of user who is sending the request 
user_two_id - id of user who is receiving request 
status - 0 for pending request, 1 for accepting request and so on.. 
action_user_id - which user has done some action in table 

,但我没有得到挂起的请求时的确切数目我使用选择查询。

现在我将向您展示一个示例,其中ID 1的用户正在发送请求,而ID 2和ID 4的用户正在接收请求。

Relationship table

现在,如果我试图让使用此查询待处理的请求:

"SELECT u.name, r.user_one_id, r.user_two_id, r.status FROM users u, relationship r WHERE r.user_one_id = ? OR r.user_two_id = ? AND r.status = 0 AND u.id = r.user_one_id AND r.action_user_id != ?" 

以及所需的参数是:user_one_iduser_two_idaction_user_id

与ID这个例子用户1登录,他不应该能够看到任何未决的请求,因为他没有收到任何,但如果我发送这个查询从上面的参数1user_one_id1user_two_id1action_user_id,我越来越喜欢这个JSON响应:

{ 
    "error": false, 
    "requests": [ 
    { 
     "name": "Dusan" // user with id 1 
    }, 
    { 
     "name": "Dusan" 
    }, 
    { 
     "name": "Jelena Radenkovic" // user with id 2 
    }, 
    { 
     "name": "Jelena Radenkovic" 
    }, 
    { 
     "name": "Stefan Dimitrijevic" // user with id 4 
    }, 
    { 
     "name": "Stefan Dimitrijevic" 
    } 
    ] 
} 

,但如果用户不发送任何要求,如用户ID 2和ID 4,这是完美的工作原理。如果我发送相同的查询2参数,我得到的只有一个记录,因为它应该是。这就是我得到:

{ 
    "error": false, 
    "requests": [ 
    { 
     "name": "Dusan" // getting only this user with id 1 because he sent request to the user with id 2 
    } 
    ] 
} 

这是正常的,直到我请求发送给其他用户.. 我希望我也清楚地解释了一切。但如果不明确,请告诉我,我会更多或更好地解释。提前致谢。

+1

您可以用'选择u.name,r.user_one_id,r.user_two_id,r.status来自用户的U,关系R其中r.user_two_id =? AND r.status = 0 AND u.id = r.user_one_id'其中'r.user_two_id =?'是不使用action_user_id的当前用户的 –

+0

的ID? –

+0

action_user_id指示哪个用户已经完成了一些操作(发送请求,接受请求等) –

回答

1

根据您的架构user_one_id是发件人ID和user_two_id是接收器的ID,因此要获得准确的未决当前用户请求(即用户登录),您的查询将如下:(没必要在这种情况下使用action_user_id)

SELECT u.name, r.user_one_id, r.user_two_id, r.status FROM users u, relationship r WHERE r.user_two_id = <current_user_id> AND r.status = 0 AND u.id = r.user_one_id 

或你也可以在这种情况下使用连接:

SELECT u.name, r.user_one_id, r.user_two_id, r.status FROM relationship r join users u on u.id = r.user_one_id WHERE r.user_two_id = <current_user_id> AND r.status = 0 

现在,如果你想获得多少请求由当前用户发送然后更改user_one_iduser_two_id如下:

SELECT u.name, r.user_one_id, r.user_two_id, r.status FROM users u, relationship r WHERE r.user_one_id = <current_user_id> AND r.status = 0 AND u.id = r.user_two_id 

和同样的变化也加入。

0

尝试此查询 SELECT COUNT(u.user_two_id)从关系friend_request_count [R内用户加入U ON r.user_two_id = u.id其中状态= 0和r.user_two_id = YOUR_ID

1

你也可以试试这个:

SELECT s.user_one_id,us.name,us.email 
FROM relationship as s 
INNER JOIN user AS us ON s.user_one_id = s.id 
WHERE s.user_two_id = "'.$current_user.'" AND s.status = 0