2016-04-03 15 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