Является ли курсор единственным способом сделать это? - PullRequest
0 голосов
/ 12 апреля 2011

Я нахожусь в процессе сбивания некоторых необработанных данных, которые у меня есть.Данные находятся в базе данных MySQL.В формате миллисекунд за миллисекундами перечисляются данные о том, какие из возможных «событий» происходят в настоящее время.В нем всего несколько столбцов:

  1. id - уникальный идентификатор события строки
  2. - указывает, какое событие происходит в данный момент

Что бы я хотелсделать, это получить некоторую основную информацию относительно этих данных.В частности, я хотел бы создать таблицу, которая имеет:

  1. Идентификатор начала события
  2. Идентификатор окончания события
  3. Индексирование нового идентификаторасобытия и их возникновение, а также столбец с подробным описанием того, какое событие происходит в данный момент.

Я знаю, что с помощью PHP будет легко справиться, просто используя простой цикл по всем записям,но я пытаюсь немного раздвинуть границы моих знаний по MySQL (это может быть опасно, я знаю !!).

Итак, мой вопрос таков: лучше ли было бы использовать курсориспользовать для этого?Я спрашиваю, потому что события могут происходить несколько раз, так что группировка по типу события не сработает - или так будет?Мне просто интересно, есть ли умный способ справиться с этим, который я пропустил, без необходимости последовательно проходить каждый ряд.

Спасибо!

1 Ответ

1 голос
/ 12 апреля 2011

Чтобы продемонстрировать то, о чем я говорил ранее, скажем, у вас есть следующая таблица:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...