создайте отчет в mysql и сохраните его в файле журнала, используя триггеры, а затем проанализируйте журнал - PullRequest
0 голосов
/ 17 февраля 2020

Мне нужно создавать отчет ежемесячно или ежедневно (в зависимости от того, что проще) для конкретной таблицы c, содержащей количество записей, которые были обновлены, вставлены или удалены за этот период.

Таблица содержит столбец с именем updatedate и другой с именем удалено, где значение 0 означает, что он не удален, а значение 1 означает, что он был удален. Наконец, есть столбец первичного ключа с именем id.

Следующий код возвращает записи, удаленные за определенный период времени:

SELECT * FROM orders
    WHERE updateDate >='2019-01-01 00:00:00'
    AND updateDate <'2019-02-13 00:00:00' AND deleted = '1'

Какие запросы следует выполнить также по порядку получить отчет о вновь созданных и вставленных записях?

Я полагаю, нужно также как-то посчитать количество идентификаторов, которые существуют на дату начала, а затем количество идентификаторов, которые существуют на дату окончания, и Затем сделать вычитание для того, чтобы получить количество вновь вставленных записей? В идеале я хотел бы иметь эти отчеты в отдельных файлах

CREATE TABLE orders
(
  id INT PRIMARY KEY AUTO_INCREMENT,
  updatedate DATETIME,
  product_id INT,
  deleted INT,
  customer_id INT
);
INSERT INTO orders (updatedate, product_id, deleted, customer_id)
  VALUES
  ('2019-08-15 12:20:20', '1', '0', '123'),
  ('2019-08-15 12:20:20', '2', '0', '123'),
  ('2019-08-17 16:43:09', '4', '0', '456'),
  ('2019-08-18 09:21:43', '8', '0', '789'),
  ('2019-08-18 14:23:11', '12', '0', '123'),
  ('2019-08-21 08:34:21', '19', '0', '456');

пример вывода обновленных записей: (при условии, что идентификаторы записей не являются новыми для рассматриваемого месяца)

date total_updates

2009-08-15  2
2009-08-17  1
2009-08-18  2
2009-08-21  1

Эта же таблица необходима для записей, которые были удалены и созданы за месяц. Это должно основываться только на идентификаторах записей, которые отличаются от предыдущего месяца.

ie, если идентификатор 88 не был в таблице заказов в последний день предыдущего месяца, то это вновь вставленная запись , Если идентификатор 13 был в таблице заказов в последний день последнего предыдущего месяца, а в последний день этого месяца - нет, то это удаленная запись (что также может происходить из удаленного столбца в сочетании с обновленным столбцом)

Таким образом, этот отчет может выглядеть следующим образом:

Январь:

123 records inserted
456 records deleted 

РЕДАКТИРОВАТЬ: как было любезно замечено, в комментариях этот подход не является полностью безопасным, поскольку мы можем потерять некоторые действия. Не могли бы вы рассказать подробнее о решении «Более безопасный подход - записывать все события в журнал с использованием триггеров и анализировать их», учитывая тот факт, что любое изменение в текущей схеме недопустимо, но мы можем хранить данные в новой внешней схеме.

...