2014-07-16 41 views
1

添加一個新的字符串我有一個表wp_postmetaSQL觸發器如果不存在

meta_id  bigint(20) unsigned   PRI  (NULL) auto_increment   
post_id  bigint(20) unsigned   MUL  0         
meta_key varchar(255) utf8_unicode_ci  MUL  (NULL)        
meta_value longtext  utf8_unicode_ci    (NULL) 

表水木清華這樣的:

meta_id  post_id  meta_key meta_value 
1   1    area  12 
2   1    rooms  2 
3   2    rooms  3 

我需要創建一個觸發器,它會添加一個字符串到這表如果不存在 與meta_key ='區'和meta_value ='0'。 或更新其中meta_key ='area'和meta_value ='NULL'。

但是... 每個post_id都可能有很多meta_key。和meta_key ='區'爲每個post_id設置限制1. 但問題是,不是每個post_id都有meta_key ='area' 所以首先需要創建它!

我現在有類似的東西..(代碼如下)它是meta_key ='area'的meta_value ='0'的一部分。但我不明白如何創建這個字符串不存在。

CREATE 
    TRIGGER `trigger` BEFORE INSERT ON `wp_postmeta` 
    FOR EACH ROW BEGIN 
    IF NEW.meta_key = 'area' AND NEW.meta_value IS NULL THEN 
    SET NEW.meta_value = '0'; 
END IF; 
END; 
$$ 

回答

0

難道說:

DELIMITER $$ 

USE `dev_hiponia_hipo`$$ 

DROP TRIGGER IF EXISTS `area_for_id`$$ 

CREATE 
    /*[DEFINER = { user | CURRENT_USER }]*/ 
    TRIGGER `dev_hiponia_hipo`.`area_for_id` AFTER INSERT ON `wp_posts` 
    FOR EACH ROW BEGIN 
    IF NEW.post_type = 'property' THEN 
     INSERT INTO wp_postmeta (meta_key, meta_value, post_id) VALUES ('area', '0', NEW.ID); 
    END IF; 
    END; 
$$ 

DELIMITER ; 

- >當我設置一個新帖它會自動設置的區域值=> '0'

二觸發我的wp_postmeta設置:

 DELIMITER $$ 

USE `dev_hiponia_hipo`$$ 

DROP TRIGGER IF EXISTS `areamodif`$$ 

CREATE 
    /*!50017 DEFINER = 'devhiponia'@'192.168.1.%' */ 
    TRIGGER `areamodif` AFTER UPDATE ON `wp_postmeta` 
    FOR EACH ROW BEGIN 
    IF NEW.meta_key = 'area' AND NEW.meta_value = '' THEN 
     UPDATE wp_postmeta 
     SET meta_value = '0' 
     WHERE NEW.meta_key = 'area' AND meta_value = ''; 
    END IF; 
END; 
$$ 

DELIMITER ; 




DELIMITER $$ 

USE `dev_hiponia_hipo`$$ 

DROP TRIGGER IF EXISTS `areaifdelete`$$ 

CREATE 
    /*[DEFINER = { user | CURRENT_USER }]*/ 
    TRIGGER `areaifdelete` AFTER DELETE ON `wp_postmeta` 
    FOR EACH ROW BEGIN 
    IF OLD.meta_key = 'area' THEN 
     INSERT INTO wp_postmeta (meta_key, meta_value, post_id) VALUES ('area', '0', OLD.post_id); 
    END IF; 
    END; 
$$ 

DELIMITER ; 
0

因爲它看起來像wp_posts條目必須在wp_postmeta條目之前創建(否則你不會知道post_id),我會在wp_posts INSERT觸發器是插入wp_postmeta行後放一個。

+0

對不起..我不明白你..如果我將設置觸發器wp_posts ..我需要在觸發器中做什麼? – user3727355

+0

將一個觸發器添加到'wp_posts'中,以將空白行插入到'wp_postmeta'中 - 因此對於'wp_posts'中的每個(新)條目,都保證'wp_postmeta'中有一個'area'條目。這不是你需要的嗎? – Hobo