2011-11-24 73 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