2012-03-28 61 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];