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 %>