Как обновить родительский столбец, если все дочерние столбцы имеют одинаковые данные, используя триггер mysql - PullRequest
0 голосов
/ 27 августа 2018

У меня есть имя таблицы 'sys_parent', как показано ниже

  |-----|------|--------|
  | id  | name | status |
  |-----|------|--------|
  | 101 | bi   |   n    |    

И еще одна таблица 'sys_child', как показано ниже

   |-----|-----------|--------|--------|
   | id  | parent_id | name   | status |
   |-----|-----------|--------|--------|
   | 1   |     101   |   b    |   n    |
   | 2   |     101   |   c    |   n    |
   | 3   |     101   |   d    |   y    |

, где sys_child. parent_id это внешний ключ sys_parent. id Вопрос в том, что если я обновил каждое состояние sys_child до 'n', то родительский sys_parent. status обновится до 'n' и наоборот.Я пытался

  DELIMITER $$
 CREATE TRIGGER new_trigger 
    AFTER UPDATE ON sys_child
       FOR EACH ROW 
            BEGIN
             SET @changetype = (SELECT COUNT(*) FROM sys_child GROUP BY `status`);
             SET @statustype = (SELECT `status` FROM sys_child GROUP BY `status`);
                     IF @changetype < 2
                            THEN UPDATE sys_parent
                                SET  `status`= @statustype;
                        END IF;
  END$$
 DELIMITER; 

Но это не работает.Как я могу добиться этого с помощью триггера MySQL ??

1 Ответ

0 голосов
/ 27 августа 2018

Этот триггер будет делать то, что вы хотите.При обновлении выясняется, сколько дочерних элементов имеет родительский элемент текущего дочернего элемента (num_children), затем выясняется, сколько из этих дочерних элементов имеет тот же статус, что и текущий дочерний элемент (this_status).Если эти значения одинаковы, то все дочерние элементы имеют одинаковый статус, и родительский элемент обновляется с этим значением.

DELIMITER $$
CREATE TRIGGER new_trigger 
  AFTER UPDATE ON sys_child
  FOR EACH ROW
    BEGIN
        DECLARE num_children, this_status INT;
        SELECT COUNT(*) INTO num_children FROM sys_child WHERE parent_id = NEW.parent_id;
        SELECT COUNT(*) INTO this_status FROM sys_child WHERE parent_id = NEW.parent_id AND status = NEW.status;
        IF num_children = this_status THEN
            UPDATE sys_parent SET status= NEW.status;
        END IF;
    END $$
DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...