MySQL Trigger: Сравните значение в другой таблице

dba.stackexchange https://dba.stackexchange.com/questions/8416

  •  16-10-2019
  •  | 
  •  

Вопрос

У меня есть следующий триггер (сгенерированный с использованием PHP через mysqli) ...

DROP TRIGGER IF EXISTS post_queue_insert;
CREATE TRIGGER post_queue_insert AFTER INSERT ON posts
FOR EACH ROW BEGIN
    IF (NEW.post_type != 'revision' AND NEW.post_status != 'auto-draft') THEN
        INSERT INTO event_queue (action_id, action_do, action_key, action_value, action_event, action_timestamp, sync_complete, SITE_ID) VALUES (NEW.ID, 'post', NEW.post_type, NEW.post_status, 'insert', UNIX_TIMESTAMP(now()), 0, 1);
    END IF;
END;

Что я не могу понять, так это то, как проверить, существует ли значение «post_type» в другой таблице, а если нет, то вставьте его.

?

Это было полезно?

Решение

DROP TRIGGER IF EXISTS post_queue_insert;
CREATE TRIGGER post_queue_insert AFTER INSERT ON posts
FOR EACH ROW BEGIN
    DECLARE found_it INT;
    IF (NEW.post_type != 'revision' AND NEW.post_status != 'auto-draft') THEN
        SELECT COUNT(1) INTO found_it FROM some_other_table
        WHERE post_type = NEW.post_type;
        IF found_it = 0 THEN
            INSERT INTO event_queue (action_id, action_do, action_key, action_value, action_event, action_timestamp, sync_complete, SITE_ID) VALUES (NEW.ID, 'post', NEW.post_type, NEW.post_status, 'insert', UNIX_TIMESTAMP(now()), 0, 1);
        END IF;
    END IF;
END;

Если найдено_it = 0, то строка не содержит значения, соответствующего новому. Post_type.

Попробуй !!!

Другие советы

DROP TRIGGER IF EXISTS post_queue_insert;
CREATE TRIGGER post_queue_insert AFTER INSERT ON posts
FOR EACH ROW BEGIN
    IF  ( NEW.post_type != 'revision' 
      AND NEW.post_status != 'auto-draft'
      AND NOT EXISTS
          ( SELECT * 
            FROM other_table
            WHERE post_type = NEW.post_type
          )
        )
    THEN
        INSERT INTO event_queue (action_id, action_do, action_key, action_value, action_event, action_timestamp, sync_complete, SITE_ID) 
        VALUES (NEW.ID, 'post', NEW.post_type, NEW.post_status, 'insert', UNIX_TIMESTAMP(now()), 0, 1);
    END IF;
END;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top