0

我有 2 张桌子:

  1. 免用户
  2. 团队名册

userfree 表具有以下列

  1. uniqueid - 此项目的 A_I 唯一 ID
  2. userid - 用户 ID 号
  3. id - 由日历生成的每个用户事件的唯一 ID(因此,如果用户有 5 次空闲时间,它将是 (1-5)
  4. 开始 - 开始时间日期用户是免费的
  5. end - end timedate 用户空闲

teamroster 表具有以下列

  1. id - 此项目的 A_I 唯一 ID
  2. teamid - 他们所属团队的 ID
  3. userid - 该团队中用户的 ID

我需要做的是找到同一团队中用户的所有重叠时间。在我添加团队内容之前,我有一些 sql 来查找时间重叠的用户:

SELECT dr1.uniqueid as ida, dr2.uniqueid as idb, dr1.userid as userida, dr2.userid as useridb, dr2.start, dr2.end 
FROM `userfree` dr2
INNER JOIN `userfree` dr1
WHERE
  dr2.start >= dr1.start AND
  dr2.start <= dr1.end AND
  dr1.uniqueid != dr2.uniqueid AND
  dr1.userid != dr2.userid
ORDER BY dr2.start

我尝试了几件事,但我认为我的做法是错误的,我想我会在这里问。此外,我的方法可能效率较低。

4

1 回答 1

2

我认为您应该能够将每个加入userfree它自己的teamroster然后比较teamids

select
    dr1.uniqueid as ida, 
    dr2.uniqueid as idb, 
    dr1.userid as userida, 
    dr2.userid as useridb, 
    dr2.start, 
    dr2.end 
from
    `userfree` dr2
        inner join
    `teamroster` r2
        on dr2.userid = r2.userid
        cross join
    `userfree` dr1
        inner join
    `teamroster` r1
        on dr1.userid = r1.userid
Where
    dr2.start >= dr1.start and
    dr2.start <= dr1.end and
    dr1.uniqueid != dr2.uniqueid and
    dr1.userid != dr2.userid and
    r1.teamid = r2.teamid
order by
    dr2.start
于 2013-10-31T00:44:15.870 回答