当前位置: 首页 > 知识库问答 >
问题:

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

闻人昊昊
2023-03-14

我有一个表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) 

表smth如下所示:

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',该触发器将在此表中添加一个字符串。或者更新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;
$$

共有2个答案

黎承颜
2023-03-14

做到了:

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 ;

-->当我设置一个新的posts时,它会自动设置区域值=>'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 ;
通博实
2023-03-14

由于看起来wp_posts条目必须在wp_postmeta条目之前创建(否则您将不知道post_id),因此我将在wp_posts上放置一个after insert触发器,用于插入wp_posts行。

 类似资料:
  • 问题内容: 我有一个钥匙型课。让我们称为map的实例。 我要添加{ ,}(是的一个实例,并且一)该地图。但是,如果键已经存在,我想求和该映射图中的当前值。 目前我使用 但是在Java 8中是否有一种时髦的方式来做到这一点,例如使用和? 遗憾的是我无法弄清楚。 谢谢。 问题答案: 这就是地图上的合并功能的作用。 这可以进一步减少到 它基本上等于

  • 问题内容: 我在MySQL数据库中有一个description字段,我在两个不同的页面上访问数据库,一个页面显示整个字段,但在另一个页面上,我只想显示前50个字符。如果description字段中的字符串少于50个字符,则不会显示…,但是如果不是,则在前50个字符后显示…。 示例(完整字符串): 示例2(前50个字符): 问题答案: PHP的方法很简单: 但是您可以使用以下CSS达到更好的效果:

  • 问题内容: 我有一个带有2个表的数据库,如下所示: 列是,并且是 和 在申请表中,我有2个编辑框,名称分别为和 如果用户像电子邮件一样插入一个新的负责人姓名, 那么在保存表格的过程中,我想将新的负责人姓名插入表中,请插入最后一个并将其更新为。 如果用户保持名称,但它更新电子邮件一样,然后我想在从1 =使用新的电子邮件地址和他们(其余和)保持不变。 如果负责人的名称相同,我想保留from表的原始引用

  • 问题内容: 我在使用SQL查询时遇到问题。如果同一行尚不存在,我需要插入一行。这是我到目前为止的内容: 我对sql不太熟悉,尤其是不存在的语法,因此在执行时会出现以下错误: ORA-06550:第37行,第11列:PLS-00103:在预期以下情况之一时遇到了符号“ INSERT”: 然后和或 用“ then”符号代替“ INSERT”继续。 following: the following: 问

  • 问题内容: 我试图添加一个属性,如果它不存在。它应该很简单,但是我是XML XPath / XQuery / etc的新手,所以请原谅我的无知。 我希望能够传递XML数据并对其进行修改… 如果我像这样传递数据: 我想要 并不是 : 问题答案: 你可以做 但是,这只会更改不具有runat属性的第一个后代,至少对于SQL Server 2005,您一次只能修改一个节点。 也许将以上内容与WHILE结合

  • 问题内容: 我想做这样的事情。 我能怎么做 ?我不知道该选择元组来编辑它还是找出元组索引? 有什么帮助吗? 问题答案: 那是组织事情的非常奇怪的方式。如果存储在字典中,这很容易: 这段更新计数字典的代码是Python中常见的“模式”。常见的是,创建了一个特殊的数据结构,以使其变得更加容易: 如果您使用键访问,而该键尚不在中,则该键会自动添加一个默认值。将采取调用您传递,并调用它来获得默认值。在这种