2013-12-12 35 views
1

我在声明的Inner Join方面遇到了一些麻烦。我正在尝试从用户朋友列表的所有新闻Feed中获取所有“帖子”。我试图通过获取所有这些帖子,其中用户是initiator_user_id并从friend_user_id获取所有帖子,然后我想从initiator_user_id获取所有帖子,其中用户的id是friend_user_id。SQL Inner Join for News Feed

此前这个工作,但它只是变得用户所在的initiator_user_id职位:

$wallsql= $conn->prepare('SELECT * FROM activity f INNER JOIN wp_bp_friends n2 ON n2.friend_user_id=f.user_id WHERE n2.initiator_user_id=:userid ORDER BY datetime DESC LIMIT 8'); 

用户标识24可以看到用户ID 22的“上岗”时创建22的帐户,例如,他的状态更新。它需要做的是让userid 22参见userid 24的更新。现在它是片面的。我认为,以下将完成得到它是双向的:

$wallsql= $conn->prepare('SELECT * FROM activity f INNER JOIN wp_bp_friends n1 ON (n1.initiator_user_id=f.user_id) INNER JOIN wp_bp_friends n2 ON (n2.friend_user_id=f.user_id) WHERE (n1.friend_user_id=:userid) OR (n2.initiator_user_id=:userid) ORDER BY datetime DESC LIMIT 8'); 
$wallsql->bindParam(':userid', $_SESSION['uid']); 
$wallsql->execute(); 

这里的表和它们是如何成立。

wp_bp_friends table: 

id  initiator_user_id  friend_user_id  is_confirmed  is_limited  date_created 
11   24     22    1    0   2013-12-11 11:17:26 




Activity table: 

ID  user_id    type      component  filetype  group_id   content      datetime 
15  22    accountcreated      NULL   NULL   0    NULL    2013-12-11 11:17:26 
15  22     status      NULL   NULL   0   Hello World!   2013-12-11 11:17:26 
15  24   accountcreated      NULL   NULL    0    NULL    2013-12-11 11:17:26 
15  24     status      NULL   NULL   0    Whats up   2013-12-11 11:17:26 
+0

做单独的查询为两个方向,并与'UNION'将它们结合起来。 – Barmar

+0

我不熟悉UNION。你能给我答案吗?我和一位客户在时间紧张上有一些共同点: - /我从来不会要求别人为我做这件事,但我需要快速帮助。 – user3093592

回答

1

这可能会实现:

SELECT * 
FROM activity f 
     INNER JOIN wp_bp_friends n2 
       ON n2.friend_user_id = f.user_id 
WHERE n2.initiator_user_id = :userid 
UNION ALL 
SELECT * 
FROM activity f 
     INNER JOIN wp_bp_friends n2 
       ON n2.initiator_user_id = f.user_id 
WHERE n2.friend_user_id = :userid 
ORDER BY datetime DESC 
LIMIT 8