SQL触发器,如果不存在则添加一个新字符串

用户名

我有一张桌子wp_postmeta

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 ='area'和meta_value ='0'不存在,它将添加一个字符串到该表中。或UPDATE,其中meta_key ='area'和meta_value ='NULL'。

但是...每个post_id可能有很多meta_key。并且每个post_id的meta_key ='area'设置为限制1。但是问题在于,并非每个post_id都具有meta_key ='area',因此首先需要创建它!

我现在有这样的东西..(下面的代码)这部分将提供meta_value ='0'的meta_key ='area'。但是我不明白如果不存在该字符串我该如何创建。

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;
$$
用户名

做过某事:

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 ;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果行ID不存在,则返回一个字符串

我怎样做的东西,如果一个可选的<String>是不存在或存在但是一个空字符串?

SQL触发器:如果行不存在,则创建行

从一个文件中查找另一个文件中的字符串(如果不存在),然后从原始文件中删除

Jest:模拟一个字符串属性不存在

如果不存在,则在字符串开头添加子字符串(php)

如果存在则替换以字符串开头的文件中的行,如果不存在则添加

您可以在一个字符串中添加多少个字符x,以使该字符串中不存在三个连续的字符?

如何将.jpg添加到字符串末尾(如果不存在)

如果文件不存在,则将字符串添加到文件底部

如果属性不存在,则显示空字符串

查找其中一个文件中不存在字符串的子目录

如何检查另一个数据帧中是否不存在字符串值?

通过触发器从 insert.id 创建一个字符串

MYSQL-触发器-更新字段并将数据添加到另一个表

在drools中,如何在ArrayList中搜索一个对象,如果不存在则添加

创建一个.txt文件(如果不存在),并添加新行

如果一个字段不存在,Mongodb将添加多个文档

仅在不存在另一个子字符串的情况下搜索和替换子字符串

使用正则表达式和 C# 识别另一个字符串中不存在的字符串

如果某些字符串存在而某些字符串不存在,如何匹配多行

如果模型存在则显示模型属性,如果不存在则显示一些字符串

如果不存在则断言一个值

SQL,如果另一个表中不存在该字段,则选择字段

SQL选择-插入值(如果不存在)按另一个值分组

PostgreSQL 更新触发器:关系“新”不存在

当行不存在时更新触发器

如何在C#中查找一个字符串中存在而另一个字符串中不存在的字符?

如何在javascript中查找一个字符串中存在而另一个字符串中不存在的字符?