Триггер MySQL для таблицы A, вставка или обновление таблицы B с помощью функции TIMESTAMPDIFF () - PullRequest
0 голосов
/ 30 октября 2018

У меня есть 2 таблицы - клиенты и история клиентов.

CLIENTS:
    cID | last_seen  (LAST_SEEN is updated every 2 mins by my application)

CLIENT_HISTORY :
    ID | cID | left_left | time_arrived

Я пытаюсь:

Записывать приходы и уходы клиентов с течением времени. Поэтому, когда clients.last_seen старше 5 минут, INSERT записывает в client_history с помощью cID и значений клиентов.last_seen.

Я хочу что-то вроде:

 BEGIN
  IF (-- something here is true)
  THEN
    INSERT INTO client_history
    SET
      cID=old.cID,
      last_seen=old.last_seen;
  ELSEIF (-- something here is true)
  THEN
    INSERT INTO client_history
    SET
      time_arrived=old.last_seen
  END IF;
END

Я смотрел на использование

IF (TIMESTAMPDIFF(MINUTE,c.last_seen,NOW()) > 5) for the first IF condition.

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

1 Ответ

0 голосов
/ 30 октября 2018

Это может быть для вас.

DELIMETER $$
CREATE TRIGGER monitor
AFTER UPDATE
ON clients
FOR EACH ROW
BEGIN
IF (TIMESTAMPDIFF(MINUTE, OLD.last_seen, NEW.last_seen ) > 5)
THEN INSERT INTO client_history (cID, left_left)-- or whichever column here
SELECT NEW.cID, NEW.last_seen FROM client_history;
END IF;
END $$
DELIMETER ;

Я думал использовать значение NEW.last_seen в логике вместо функции NOW().

...