Sql 足够了,但返回26000多行,bug表中有10000行。服务器之间的连接不是很好,所以在应用程序中工作不是很理想,但是我想我可以将这些想法混合在一起,让一些东西工作得更快。我将不得不花一些时间考虑它——但是谢谢,你发布的内容给了我更多的选择。我确实看过RE
Sql 足够了,但返回26000多行,bug表中有10000行。服务器之间的连接不是很好,所以在应用程序中工作不是很理想,但是我想我可以将这些想法混合在一起,让一些东西工作得更快。我将不得不花一些时间考虑它——但是谢谢,你发布的内容给了我更多的选择。我确实看过RE,sql,report,bugzilla,Sql,Report,Bugzilla,足够了,但返回26000多行,bug表中有10000行。服务器之间的连接不是很好,所以在应用程序中工作不是很理想,但是我想我可以将这些想法混合在一起,让一些东西工作得更快。我将不得不花一些时间考虑它——但是谢谢,你发布的内容给了我更多的选择。我确实看过REST API,但我读到它有很多错误(尽管这可能只是在我们的旧版本上,我们很快就会更新)。此外,似乎很难问“2012-01-01上的bug 1234的状态如何”,看起来我仍然需要下载并解析更改集。我想可能有一个复杂的布尔查询可以做到这一点。如果有
足够了,但返回26000多行,bug表中有10000行。服务器之间的连接不是很好,所以在应用程序中工作不是很理想,但是我想我可以将这些想法混合在一起,让一些东西工作得更快。我将不得不花一些时间考虑它——但是谢谢,你发布的内容给了我更多的选择。我确实看过REST API,但我读到它有很多错误(尽管这可能只是在我们的旧版本上,我们很快就会更新)。此外,似乎很难问“2012-01-01上的bug 1234的状态如何”,看起来我仍然需要下载并解析更改集。我想可能有一个复杂的布尔查询可以做到这一点。如果有机会,我会给它一个测试,但是看起来它会通过慢速链接传输太多的信息,而不会比SQL查询快(因为我确实计算子表,只返回原始总数)。您在哪里读到REST API有很多问题?作为它的维护者,我可以向您保证,当前版本是高度稳定的,并且Mozilla项目每周用于数十万个查询。它很快将被一个本机RESTAPI所取代,它将具有相同的接口(带有一个兼容性垫片),但速度更快,并且对返回的数据限制更少。
fieldid INTEGER, -- References the fielddefs table
bug_when TIMESTAMP, -- Time the change happend
added TEXT, -- New text for the field
removed TEXT, -- Old text for the field
SELECT bug_status, bug_id, op_sys, resolution, rep_platform
FROM (SELECT bug_id,
IFNULL((SELECT removed FROM bugs_activity a, fielddefs f
WHERE a.fieldid = f.id
AND bug_id = b.bug_id AND f.name = 'bug_status'
AND bug_when >= '2012-01-01 00:00:00'
ORDER BY bug_when DESC LIMIT 1), bug_status) AS bug_status,
-- Repeat IFNULL clause for op_sys, resolution and rep_platform
FROM bugs b
WHERE b.creation_ts <= '2012-01-01 00:00:00' ) bug_subselect
-- Some other filters to reduce the bugs (specific product, ect)
)
-- More filters based on the new values that have been derived
;
SELECT bug_status, bug_id, op_sys, resolution, rep_platform
FROM (SELECT bug_id,
IFNULL((SELECT removed FROM bugs_activity a, fielddefs f
WHERE a.fieldid = f.id AND bug_id = b.bug_id AND f.name = 'bug_status'
AND bug_when = (
SELECT MIN(bug_when) FROM bugs_activity a, fielddefs f
WHERE a.fieldid = f.id
AND bug_id = b.bug_id
AND f.name = 'bug_status'
AND bug_when >= '2012-01-01 00:00:00'
LIMIT 1
)
LIMIT 1), bug_status) AS bug_status,
-- Repeat IFNULL clause for op_sys, resolution and rep_platform
FROM bugs b
WHERE b.creation_ts <= '2012-01-01 00:00:00' ) bug_subselect
-- Some other filters to reduce the bugs (specific product, ect)
)
-- More filters based on the new values that have been derived
;
SET @tdate = '2012-01-01 00:00:00';
SELECT
b.bug_id
,CASE
WHEN s.removed IS NULL THEN b.bug_status
ELSE s.removed
END AS statusAtDate
,CASE
WHEN o.removed IS NULL THEN b.op_sys
ELSE o.removed
END AS apSysAtDate
FROM
bugs AS b
LEFT OUTER JOIN (
SELECT
a.bug_id
,a.bug_when
,a.removed
,a.bug_when
,@row_num := IF(@last=a.bug_id,@row_num+1,1) AS rnk
,@last:=a.bug_id
FROM
bug_activity AS a
INNER JOIN fielddefs AS f
ON a.fieldid = f.id
AND f.name = 'bug_status'
WHERE
a.bug_when <= @tdate
ORDER BY
a.bug_id
,a.bug_when
) AS s
ON b.bug_id = s.bug_id
AND s.rnk=1
LEFT OUTER JOIN (
SELECT
a.bug_id
,a.bug_when
,a.removed
,a.bug_when
,@row_num := IF(@last=a.bug_id,@row_num+1,1) AS rnk
,@last:=a.bug_id
FROM
bug_activity AS a
INNER JOIN fielddefs AS f
ON a.fieldid = f.id
AND f.name = 'op_sys'
WHERE
a.bug_when <= @tdate
ORDER BY
a.bug_id
,a.bug_when
) AS o
ON b.bug_id = o.bug_id
AND o.rnk=1
--repeat for resolution and rep_platform
SELECT
bug_id
,bug_status
,op_sys
,max(old_status)
,max(old_opSys)
(
SELECT
*
FROM
bugs AS b
LEFT OUTER JOIN (
SELECT
a.bug_id
,a.bug_when
,if(f.name = 'bug_status',a.removed,NULL) AS old_status
,if(f.name = 'op_sys',a.removed,NULL) AS old_opSys
,a.bug_when
,@row_num := IF(@last=a.bug_id AND@lastField=f.name ,@row_num+1,1) AS rnk
,@last:=a.bug_id
,@lastField:=f.name
FROM
bug_activity AS a
INNER JOIN fielddefs AS f
ON a.fieldid = f.id
WHERE
a.bug_when <= '2012-01-01 00:00:00'
AND f.name in( 'bug_status','op_sys')
ORDER BY
a.bug_id
,f.name
,a.bug_when
) AS s
ON b.bug_id = s.bug_id
AND s.rnk=1
) AS T
GROUP BY
bug_id
,bug_status
,op_sys
<%= row->old_status ?: row->bug_status %>