用于读取用户流的SQL查询

时间:2012-03-28 00:44:59

标签: sql left-join inner-join outer-join

CREATE TABLE `social_activity_stream` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `social_actor_id` int(11) NOT NULL,
  `social_activity_id` bigint(20) NOT NULL,
  `social_activity_type_id` int(11) NOT NULL,
  `social_share_policy_id` int(11) DEFAULT NULL,
  `social_user_friend_id` bigint(20) DEFAULT NULL,
  `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `date_read` datetime DEFAULT NULL,
   PRIMARY KEY (`id`))

每个社交行为者都创建一个社交活动,共享策略PUBLIC,PRIVATE,FRIENDS 让我们说有3个演员: A,B,C 他们是朋友

A与FRIENDS(策略)共享的活动将在表中创建3行:

  • A [A,A TEXT POST,FRIENDS,NULL]
  • 一个用于B [B,A TEXT POST,FRIENDS,A-> B]
  • 一个用于C [C,A TEXT POST,FRIENDS,A-> C]

B想要浏览A的活动流: 这是伪查询:

  • 通过''流
  • 获取公共交通
  • 通过A'stream获取私人活动,其中FriendId = A-> B
  • 通过A'stream获取朋友的活动,但仅限于该活动存在 在B的流中(否则它可能是A的朋友D而不是 B)的朋友

任何想法都可以在一个查询中完成吗?

1 个答案:

答案 0 :(得分:0)

Duh,这很简单。确实是一个糟糕的问题。

SELECT a.*
from social_activity_stream a INNER JOIN social_activity_stream b USING(social_activity_id) WHERE 
a.social_actor_id = [user_id] and b.social_actor_id = [friend_id];