如何查询DNN(DotNetNuke)数据库以查找最近修改过的页面

时间:2018-05-02 15:23:37

标签: sql dotnetnuke

我正在尝试提供一个SQL查询,该查询可以找到DNN网站中最近编辑过的所有网页,但CreatedOnDateLastModifiedOnDate值似乎都不是非常有用 - 例如,LastModifiedOnDate表格中的HtmlText列似乎每当内容编辑器更新时都会更新,只需点击“编辑”即可。 (即使他们实际上没有做出任何改变)。

例如,此查询会返回自2018-01-01以来实际未更改的页面的大量网址:

select distinct tu.url
from HtmlText ht
join TabModules tm
    on ht.moduleid = tm.moduleid
join Modules m
    on tm.moduleid = m.moduleid
join Tabs t
    on tm.tabid = t.tabid
join TabUrls tu
    on t.tabid = tu.tabid
where ht.LastModifiedOnDate >= '2018-01-01'

在数据库中是否有一些我不了解的地方可以更准确地跟踪更改?

修改

事实证明,找到DNN网站中已更改页面的最佳方法是加入TabVersions表,例如:

select distinct replace(t.tabpath, '//', '/'), u.email, u.displayname
from HtmlText ht
join TabModules tm
    on ht.moduleid = tm.moduleid
join Tabs t
    on tm.tabid = t.tabid
join TabVersions tv
    on t.TabID = tv.tabid
join Users u
    on tv.createdbyuserid = u.userid
where tv.CreatedOnDate >= '2018-03-01'

1 个答案:

答案 0 :(得分:1)

每个Tab,TabModule设置和模块内容(取决于模块本身)都会跟踪修改日期。甚至是HTMLText。 是的,无论对设置或内容进行实际更改,按下更新按钮时日期都会更新。

但是,只需打开设置即可更新LastModifiedOnDate。

您的查询似乎不正确。我运行它并没有返回我修改的最新HTMLText。仅当删除TabUrls上的内部联接时,才返回所有模块。所以我会这样做:

SELECT HtmlText.ModuleID, TabModules.ModuleTitle, Tabs.TabName, TabUrls.Url 
  FROM HtmlText 
  INNER JOIN TabModules ON TabModules.ModuleID = HtmlText.ModuleID 
  INNER JOIN Tabs ON Tabs.TabID = TabModules.TabID
  LEFT OUTER JOIN TabUrls ON TabUrls.TabId = Tabs.TabID
  ORDER BY HtmlText.LastModifiedOnDate DESC