2013-02-02 104 views
0

說我有一個表的朋友MySQL的循環或嵌套查詢

user_1 | user_2 

然後,說我想看看這些朋友一直在漲,所以我檢查的職位表和更新表

post_id | post_title | post_message | user_id | timestamp 

update_id | title | userid | timestamp 

我想達到以下邏輯:獲取朋友列表,查看生成的朋友列表,查看他們是否添加了任何內容,並按照最近的活動(時間戳)進行排序。

Select user_1 from friends where user_2 = '$my_userid' 
union 
Select user_2 from friends where user_1 = '$my_userid' 

//now loop through each of these friends and check the update/post tables to see if they have added anything recently 

我可以通過1 MySQL查詢來做到這一切,還是我必須打破它並使用PHP?

+0

@AshwinMukhija首先我生成了一個朋友列表。然後在PHP中,我循環遍歷它們併爲它們的活動做了單獨的查詢,但由於它不是一次全部選中它們,所以結果只會將事件按時間順序排列(每個用戶的時間戳),而不是整體。 – user1852176

回答

1

post_id | post_title | post_message | user_id |時間戳 - 表_A

update_id |標題|用戶ID |時間戳 - 表-B

嘗試下面的查詢

SELECT A.*, B.* FROM Table_A AS A JOIN Table_B AS B ON B.userid = A.user_id 
WHERE A.user_id IN (100,101,102) 
ORDER BY B.timestamp DESC; 

A. * - 如果你想具體列A.post_id將讓你的所有從表A中的列。

您可以通過添加LIMIT子句來計算結果的數量。

注:我假設100,101,102是生成的用戶ID。您可以在IN子句中添加用戶ID。

更新

把你的IN子句中所需要的用戶ID,如果你想限制的朋友。如果不刪除where子句,那麼您可以無限制地獲得所有朋友的更新。您可以通過您需要的任何欄目進行訂購。你可以做ADER BY A.user_id,A.post_id,甚至可以有多個列

+0

因此,我可以將IN子句更改爲我的朋友列表的嵌套查詢? – user1852176

+0

這取決於您的要求。如果你想限制朋友,把你需要的用戶ID放在IN子句中。如果不刪除where子句,那麼您可以無限制地獲得所有朋友的更新。 – Techie

+0

是的,您可以在IN子句中編寫子查詢 – Techie