【发布时间】:2012-03-28 00:44:58
【问题描述】:
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 与 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' 流获取公共活动
- 通过 FriendId = A->B 获取 A'stream 的私人活动
- 通过 A'stream 获取好友活动,但前提是该活动存在 在 B 的流中(否则可能是 A 的朋友 D 不是 B) 的朋友
知道这可以在单个查询中完成吗?
【问题讨论】:
标签: sql left-join inner-join outer-join