Сообственно об этом я расскажу как то в другой раз, думаю это не последняя статья на телефонную тематику у меня :)
Немножко посмотрел документацию по MySQL и приступил, что тут может быть сложного то… сделать три тригера, на вставку, обновление и удаление записи в таблице:
-- Insert peer -- CREATE TRIGGER tel_add AFTER INSERT ON tel_numbers FOR EACH ROW BEGIN INSERT INTO tel_peers SET id = NEW.id, name = NEW.login, callerid = NEW.tel_number, md5secret = MD5(CONCAT(NEW.login,':',NEW.allowed_cid,':',NEW.password)); END; -- Update peer -- CREATE TRIGGER tel_update AFTER UPDATE ON tel_numbers FOR EACH ROW BEGIN UPDATE tel_peers SET name = NEW.login, callerid = NEW.tel_number, md5secret = MD5(CONCAT(NEW.login,':',NEW.allowed_cid,':',NEW.password)) WHERE id = NEW.id; END; -- Delete peer -- CREATE TRIGGER tel_del AFTER DELETE ON tel_numbers FOR EACH ROW BEGIN DELETE FROM tel_peers WHERE id = NEW.id; END;Но как оказалось, UTM5 не удаляет данные когда в GUI нажимаешь кнопку удалить, в таблице есть отдельное поле с признаком того что запись удалена (я так понимаю для того что бы была возможность просмотреть старые записи). Пришлось мне переделывать тригер на обновление, а на удаление просто выбросить.
-- Update peer --
CREATE TRIGGER tel_update AFTER UPDATE ON tel_numbers
FOR EACH ROW
BEGIN
IF (OLD.is_deleted = 0 AND NEW.is_deleted = 1) THEN
BEGIN
DELETE FROM tel_peers WHERE id = NEW.id;
END;
ELSE
BEGIN
UPDATE tel_peers SET
name = NEW.login,
callerid = NEW.tel_number,
md5secret = MD5(CONCAT(NEW.login,':',NEW.allowed_cid,':',NEW.password))
WHERE id = NEW.id;
END;
END IF;
END;
Конечно это все наверное можно как то более изящно переписать, но так как я не сильно большой специалист в SQL, для решения моей задачи достаточно :)