Desencadenante mysql: compare el valor en otra tabla
Pregunta
Tengo el siguiente disparador (generado usando php a través de 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;
Lo que no puedo entender es cómo verificar si el valor 'post_type' existe en otra tabla y si no lo hace, inserte.
?
Solución
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;
Si FUND_IT = 0, la fila no contiene un valor que coincida con New.Post_Type.
Darle una oportunidad !!!
Otros consejos
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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange