2012-03-24 90 views
0

兩個記錄項目訪問權限的表。我想向管理員顯示他/她自從用戶上次訪問該項目/工作表並具有access_code爲「e」(已編輯)以來未訪問過的項目/工作表的列表。獲取最新訪問日誌,比較兩個訪問日誌表之間的記錄

可能存在的聯繫從未訪問的項目/工作表的情況下(即沒有匹配的項目/在管理表工作表)(其實這是我卡住)

很顯然,我是什麼之後,單查詢 「所有這一切」 ..也許做夢..

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表中的記錄並不相關。 (即user_access表中的id不相關)

我已經關閉了,但殺手似乎是管理員在該項目的admin_access表中沒有訪問記錄的位置。 (MAX(日)返回NULL,然後比較失敗)

尋找這個新的角度..

+0

哎呀我的表,其中錯位.. – 2012-03-24 19:15:15

+0

admin_access:PROJECT_ID,wksheet_id,ID,ACCESS_DATE,access_code | user_access:project_id,wksheet_id,id,access_date,access_code – 2012-03-24 19:16:27

回答

0

我終於得到了一些作品時最大(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比較佔從最大(a.access_date)可能無效記錄。

這將是有趣的,聽到其他的方法來做到這一點...