Sql 如何创建包含用户接触或负责的所有票据的Trac报告?
有许多例子可以用来创建新的。据我所知,这仍然是一个棘手的问题,任何现有配方都没有涵盖: 。。。设计报告以显示用户所在位置的所有票据 所有者、报告者或他们尚未创建但已创建的票证 我给你留下了评论。这是最后一个棘手的部分Sql 如何创建包含用户接触或负责的所有票据的Trac报告?,sql,report,trac,Sql,Report,Trac,有许多例子可以用来创建新的。据我所知,这仍然是一个棘手的问题,任何现有配方都没有涵盖: 。。。设计报告以显示用户所在位置的所有票据 所有者、报告者或他们尚未创建但已创建的票证 我给你留下了评论。这是最后一个棘手的部分 是否有任何建议,将效率视为额外的奖励?以下是我自己的第一个工作解决方案: “(当前)用户是所有者或报告者或(其中一个)评论作者” 我绝对不是SQL专家,所以可能有一个更有效的解决方案,但这个解决方案至少在显示已注释的记录单时有效,而且每个记录单不超过一次。您使用的是什么SQL风格?
是否有任何建议,将效率视为额外的奖励?以下是我自己的第一个工作解决方案: “(当前)用户是所有者或报告者或(其中一个)评论作者”
我绝对不是SQL专家,所以可能有一个更有效的解决方案,但这个解决方案至少在显示已注释的记录单时有效,而且每个记录单不超过一次。您使用的是什么SQL风格?SQLite?这里是SQLite,是的。但我试图遵循Trac的理念,即使用最可移植、最不特定于db后端的SQL语句。你认为这有什么特别的问题吗?在我的系统(基于MySQL)上进行测试时,我在最后的“orderby”子句中遇到了错误,所以我想我应该仔细检查一下以确定。我不得不将列名替换为别名(例如:
t.milestone
-->\uuuu group\uuu
)以使其正常工作。我正在测试直接发送到DB的命令,而不是通过Trac reports UI,所以这可能是不同之处。一个潜在的问题是,此查询返回用户修改的所有票据,而不仅仅是他们留下注释的票据。例如,在我的系统中,该用户获取了一张票据,用户所做的只是将自己添加到“CC”列表中。要解决此问题,您需要从Trac的自动生成的注释文本中过滤掉用户注释,但我不知道是否可以单独使用SQL。Trac 1.0在票证视图上似乎有一个“仅注释”选项,用于过滤票证属性更改并仅显示真实注释。这项功能可能可以在这里使用,但我不知道这是否是只使用SQL就可以完成的(您可能需要将其包装在插件中)。
SELECT
p.value AS __color__,
t.milestone AS __group__,
id AS ticket, t.type AS type,
reporter, t.time as created,
owner, changetime AS modified,
author as commenter, tcg.time as date
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
LEFT JOIN ticket_change tcg ON t.id = tcg.ticket
WHERE owner = $USER OR reporter = $USER
GROUP BY id
UNION
SELECT
p.value AS __color__,
t.milestone AS __group__,
id AS ticket, t.type AS type,
reporter, t.time as created,
owner, changetime AS modified,
author as commenter, tcg.time as date
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
LEFT JOIN ticket_change tcg ON t.id = tcg.ticket
WHERE author = $USER
AND id NOT IN (
SELECT id
FROM ticket
WHERE owner = $USER OR reporter = $USER
)
GROUP BY id
ORDER BY t.milestone, p.value, t.type, t.time