选择待处理的请求(Friendship Restful Api)PHP和MySql

时间:2016-04-03 14:26:50

标签: php mysql

我想为Android开发一个社交网络应用程序,用户可以发送友情请求并接受友情请求。我已经做到了。用户可以向其他人发送请求:

用户表(用户)

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

但是当我使用select query时,我没有得到确切的待处理请求数。

现在我将向您展示一个示例,其中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的用户已登录,并且他不应该看到任何待处理请求,因为他没有收到任何请求,但是如果我从上面发送带有1参数{{}}的查询{1}},user_one_id的{​​{1}}和1的{​​{1}},我得到的JSON响应如下:

user_two_id

但如果用户没有发送任何请求,例如ID为2且ID为4的用户,则此功能非常有效。如果我发送带有2的相同查询参数,那么我只能获得一条记录。这就是我得到的:

1

这是好的,直到我向其他用户发送请求.. 我希望我已经很清楚地解释了一切。但如果不清楚,请告诉我,我会解释得更多或更好。提前致谢。

3 个答案:

答案 0 :(得分: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

或者你也可以在这种情况下使用join:

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_id更改为user_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

并且加入的变化也相同。

答案 1 :(得分:1)

你也可以试试这个:

Where-Object : A positional parameter cannot be found that accepts argument 'System.Object[]'.
At C:\Users\user1\Desktop\setuserphoto.ps1:14 char:13
+             Where $Photo -Like "*$Name*" {
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Where-Object], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.WhereObjectCommand

答案 2 :(得分:0)

尝试此查询 SELECT COUNT(u.user_two_id)作为来自关系r内部联接用户的friend_request_count你在r.user_two_id = u.id,其中status = 0和r.user_two_id = your_id