2011-11-24 74 views
1

表:複雜的加入/聯合查詢

items -> id, userId, tagId, postedOn 

itemsTags -> id, name 

users -> id, firstName, lastName 

usersFriends -> id, userId, friendUserId 

系統需要重新構建,在目前的流動是這樣的:

  1. 獲取用戶的所有朋友。
  2. 每個朋友(foreach)獲取朋友發佈的物品。
  3. 獲取項目的標籤數據(tagId)。
  4. 獲取項目(userId)的用戶數據。

但問題是,我需要按日期對其進行排序,然後在特定的日期進行排序,例如,我想查看今天發佈的所有朋友的項目,因此我需要一個查詢這4個查詢在一個,所以基本上SELECT * FROM usersFriends JOIN items ON userId ...

我只是無法弄清楚其餘。

回答

1
SELECT F.*, I.*, IT.* 
FROM usersFriends UF 
    LEFT JOIN users F     --- friends 
    ON F.id = UF.friendUserId 
    LEFT JOIN items I     --- items they posted 
    ON I.userId = UF.friendUserId 
    LEFT JOIN itemsTags IT    --- tags of those items 
    ON I.tagId = IT.id 
WHERE UF.userId = ?? 

哪裏放置用戶的id的問號。

+0

沒有結果,如果該項目沒有標籤我該如何解決這個問題? – randomKek

+0

首先感謝編輯'ypercube',現在更清晰.. @Mike,對於初學者,我想你想選擇I. *而不是IT。*,如果你已經將你的I.itemTag的默認值設置爲null,那麼你應該這樣說.. ON i.tagId = IT.id或i.tagId IS NULL – Lauw

+0

選擇它。*,U. * FROM UF usersFriends JOIN 項目我 ON I.userId = UF.friendUserId JOIN itemsTags IT ON I.tagId = IT.id或I.tagId IS NULL JOIN users U ON U.id = I.userId WHERE UF.userId ='12663'不工作...我沒有得到你的答案,謝謝所有的答案! – randomKek