簡體   English   中英

選擇待處理請求(Friendship Restful Api)PHP和MySql

[英]Select pending requests (Friendship Restful Api) PHP and 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查詢時,我沒有得到確切的待處理請求數。

現在我將向您展示一個示例,其中ID為1的用戶正在發送請求,而ID為2且ID為4的用戶正在接收請求。

關系表

現在,如果我嘗試使用此查詢獲取待處理的請求:

"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表示user_one_id1表示user_two_id1表示action_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
    }
  ]
}

這是好的,直到我向其他用戶發送請求..我希望我已經很清楚地解釋了一切。 但如果不清楚,請告訴我,我會解釋得更多或更好。 提前致謝。

根據您的架構, 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_iduser_two_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

加入時也有相同的變化。

你也可以試試這個:

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

在r.user_two_id = u.id上嘗試此查詢SELECT COUNT(u.user_two_id)作為來自關系r內部聯接用戶的friend_request_count,其中status = 0且r.user_two_id = your_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM