两个记录项目访问权限的表。我想向管理员显示他/她未访问过的项目/工作表列表,因为用户上次访问了具有“e”(已编辑)的access_code的项目/工作表。
可能存在管理员从未访问过该项目/工作表的情况(即管理表中没有匹配的项目/工作表)(这实际上是我被卡住的地方)
显然,我所追求的是一个“做到这一切”的单一查询......也许在做梦......
admin_access project_id,wksheet_id,id,access_date,access_code user_access project_id,wksheet_id,id,access_date,access_code
(其中id是该访问事件的用户/管理员ID,access_date是时间戳)
结果表 project_id,wksheet_id
我需要的是一个记录列表(project_id,wksheet_id),其中表user_access中的access_date是最大的(即管理员无法访问该项目/工作表,因为用户上次编辑了该工作表。(注意:唯一)其他access_code对于视图来说是“v”))
管理员之前查看或编辑过该工作表或者哪个用户上次访问该用户访问表中的记录并不相关。 (即user_access表中的id不相关)
我已经接近但杀手似乎是管理员在该项目的admin_access表中没有访问记录的地方。 (max(date)返回NULL,然后比较失败)
寻找新的角度..
答案 0 :(得分:0)
当max(a.access_date)为比较为NULL时,我终于得到了一些有用的东西
Select * from
(SELECT u.project_id, u.wksheet_id, max(u.access_date) as user_date, max(a.access_date) as admin_date FROM user_access u
left outer join admin_access a on (a.project_id = u.project_id and a.wksheet_id = u.wksheet_id)
where u.access_code = 'e'
group by u.project_id, u.wksheet_id) as maxtable
where maxtable.user_date > maxtable.admin_date or
maxtable.admin_date is NULL
关键是获取产生可能的匹配项目/工作表的良好列表的查询,并在选择中使用它,其中比较从缺少的匹配admin_access记录中考虑来自max(a.access_date)的可能空值。
听到其他方法可以做到这一点很有意思......