2011-04-11 46 views
0

我正在通过一些原始数据搅动我。数据在MySQL数据库中。数据列表以毫秒为单位显示当前正在发生的事件中的哪些事件。它只有几列:游标是唯一的方法吗?

  1. ID - 该行
  2. 事件的唯一标识符 - 表示该事件正在发生

我想什么做的就是关于这些的一些基本信息数据。具体来说,我想创建一个具有表:

  1. ,一个事件开始
  2. 一个事件结束
  3. 一个新的ID索引的事件及其发生,该ID的ID以及详细列出当前正在发生哪个事件的列。

我知道,这将很容易处理使用PHP,只是使用简单的循环遍历所有记录,但我试图推动我的MySQL知识的边界在这里一点(它可能是危险的,我知道!!)。

所以,我的问题是这样的:一个游标是最好的东西用于这个?我问,因为事件可能会发生多次,所以按照事件类型进行分组将不起作用 - 或者会这样吗?我只是想知道是否有一种聪明的方式来处理我错过的事情,而不需要按顺序经过每一行。

谢谢!

+2

是ID,通过任何机会,和经销商增量列?我可以想象也许是左连接来获取下一个记录的开始时间,并使用所有值插入到新表中。高效?也许不是,但有效。 - 编辑:我越想它,为什么新桌子呢?联合可以为您提供所需的所有信息,同时保留当前的表格和数据。 – 2011-04-11 23:43:54

回答

1

为了证明什么,我提早了评论,说你有如下表:

event_log 
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
    start DATETIME 
    event VARCHAR(255)      # or whatever you want for datatype 

收集这些信息是那样简单:

SELECT el.*, 
     (SELECT el_j.start   # - 
      FROM  event_log el_j  # | 
      WHERE el_j.id > el.id  # |- Grab next row based on the next ID 
      LIMIT 1) as end    # - 
FROM  event_log 
ORDER BY start; 
+0

谢谢 - 非常狡猾!我尝试过实现它,但是存在一个小问题 - id列本质上是一个自动增量列,它由不同的程序输出,从录制开始(从1开始)开始索引时间。问题是,表结构是这样的:“事件日志 ID INT 事件VARCHAR(255)”,我想知道有一种方法来确定开始和结束时间(以id显示)。换句话说,这是您建议的代码背后的一步! – vize 2011-04-12 08:27:49

+0

@vize:那你如何确定时间?如果我可以有这个等式,我可以帮你解决。 ;-)(有'ADDTIME()'和'ADDDATE()'你可以与ID耦合得到时间偏移量) – 2011-04-12 15:42:00

相关问题