2012-03-28 70 views
0
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`)) 

每一个社会角色建立一种社会活动,与分享政策公有,私有,朋友 比方说,有3个角色: A,B,C 他们是朋友SQL查询来读取用户的流

由A和朋友(策略)共享一个活动将在表中创建3行:

  • 一项所述的[A,A TEXT POST,朋友,NULL]
  • 一个用于B [B,A TEXT POST,FRIENDS,A-> B]
  • 一个用于C [C,A TEXT POST,朋友,A-> C]

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

  • 得到公众ACTVITIES由A”流
  • GET通过A'stream PRIVATE活动与FriendId = A-> B
  • 得到朋友活动由A'stream但只有当该活动在B的流存在 (否则它可能是一个朋友d A谁是不是 B)的朋友

任何想法,这可以在一个单一的查询?

回答

0

呃,那很简单。确实很差的问题。

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];