2011-04-11 47 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

相關問題