2013-04-26 63 views
1
SELECT id AS ticket, status, priority, reporter, owner, 
     time AS created, summary 
    FROM ticket 
    WHERE status IN ('new', 'assigned', 'reopened') and reporter = $USER 
    ORDER BY time, priority 

我试图让记者看到他们过去的门票,他们有当前打开的门票,但对trac来说是新的门票。非常感谢使用当前日期的任何帮助。Trac查询显示已过期的门票

+0

Trac是否支持NOW()? – 2013-04-26 16:55:09

+0

我不这么认为,但我是trac新手,所以仍在学习 – 2013-04-26 16:58:03

+0

好奇什么是Trac,我查了一下,发现“Trac ....需要一个数据库,SQLite,PostgreSQL或MySQL。” (http://trac.edgewall.org/wiki/TracInstall)所以问题是,你的安装使用了哪个数据库? – 2013-04-26 21:16:59

回答

1

要完成你需要

  • 设置自定义票证字段任务due_date或相似(可能在你的案件已经完成)
  • 使用上Trac的数据库表ticket_custom一个JOIN来获取领域值
  • 检索当前的日期(时间戳)和DUE_DATE当前日期的
  • 转换至少一个(可能两者)进行比较

这里我会跳过1 + 2,因为现在有关于StackOverflow的文档。见How to show due date column in the trac reports?)和其他地方。

到达NOW():根据报告中的authoritative wiki documentation,Trac报告中只有一个动态分配的变量:$ USER。所以你需要使用一个SQL函数。我没能找到一个便携的解决方案,所以这些都取决于你的数据库后端建议:

  • 的SQLite(Trac系统默认):current_datedatetime('now','localtime')
  • 的PostgreSQL:current_timestampnow()

在最后子任务:可能你还没有(使用)真正的自定义时间字段,因为它是一个开发快照版本,并且仍然接近流血边缘。我只是指出它的完整性,因为它将为您节省使用字符串转换替代方法的麻烦,如下所述。

你现在可能使用的是一个字符串,也许有改进的输入法,由DateFieldPlugin提供。但是,在SQL语句中,字符串值最初是无用的直接比较。您必须将所有字符串转换为日期值或整数才能使您的报表正常工作。请参阅How to create report with tickets closed at certain date in Trac,因为它与时间戳转换有关。我建议你使用本地Trac的时间列格式(整数),这取决于你的Trac的版本:

  • Trac的< = 0.11:POSIX秒
  • Trac系统> = 0.12:POSIX - 秒

但发布的示例提倡在SQL语句中使用date函数(适用于SQLite)。根据您的日期字符串格式,这需要将字符串转换为适当的格式,即使用substr(如sample report for DateFieldPlugin中所示)。

把拼在一起(例如对于SQLite的,假设MM/DD/YYYY为DUE_DATE字符串格式):

SELECT id AS ticket, status, priority, reporter, owner, 
     time AS created, summary, tc.value as date 
    FROM ticket t 
LEFT JOIN ticket_custom tc on t.id = tc.ticket and tc.name= 'due_date' 
    WHERE status IN ('new', 'assigned', 'reopened') and reporter = $USER 
     and date(substr(tc.value,7,4)||"-"||substr(tc.value,1,2)||"-"||substr(tc.value,4,2)) < current_date 
    ORDER BY time, priority 
0

想通了自己和忘了这个职位,但只是完成的缘故,我将张贴我的查询。

SELECT p.value AS __color__, id AS ticket, status, owner, c1.value AS company, 
     time AS created, c.value AS target_date, summary, p.value as Priority 
    FROM ticket t 
    LEFT JOIN enum p ON p.name = t.priority 
    LEFT JOIN ticket_custom c ON t.id=c.ticket AND c.name='target_date' 
    LEFT JOIN ticket_custom c1 ON t.id=c1.ticket AND c1.name='company' 
    WHERE status IN ('new', 'assigned', 'reopened') and reporter= $USER and CURRENT_DATE > target_date 
    ORDER BY target_date 
+0

你介意分享自定义票据字段定义,填充'target_date'值的格式/方法以及您为Trac利用的数据库后端请求吗?正如你在评论中已经指出的那样,这个问题很重要,因为它很大程度上取决于这种格式,所以如何/如何在SQL语句中进行比较。成功应用您的决议取决于了解这些事实。 – hasienda 2013-05-02 00:12:38