【问题标题】:SQL query to read a user's stream读取用户流的 SQL 查询
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2022-11-21
      相关资源
      最近更新 更多