插入另一个表时的MySQL触发器问题

Posted

技术标签:

【中文标题】插入另一个表时的MySQL触发器问题【英文标题】:MySQL Trigger issue when inserting into another table 【发布时间】:2014-12-31 11:05:54 【问题描述】:

我有一个触发器,当另一个表被写入时,我试图将其写入一个表。

问题是我正在读取的表是在这样的几行中存储 1 个条目(不是我的表,插件会这样写):

406     test5               74      63      2014-11-04 13:43:35

407     test5               75      63      2014-11-04 13:43:35

408     test5@w.com         76      63      2014-11-04 13:43:35

409     12345678909         78      63      2014-11-04 13:43:35

410     Movable Assets      79      63      2014-11-04 13:43:35

我正在使用以下内容写入我的新表:

INSERT INTO `new_memberlist`

(FirstName, LastName, Email, Phone, InterestedIn, Province, Status, DateRegistered)

(
select 
MAX(case when field_id = 74 and entry_id = (SELECT MAX(entry_id) FROM ch_arf_entry_values) then entry_value end) as FirstName, 
MAX(case when field_id = 75 and entry_id = (SELECT MAX(entry_id) FROM ch_arf_entry_values) then entry_value end) as LastName, 
MAX(case when field_id = 76 and entry_id = (SELECT MAX(entry_id) FROM ch_arf_entry_values) then entry_value end) as Email, 
MAX(case when field_id = 78 and entry_id = (SELECT MAX(entry_id) FROM ch_arf_entry_values) then entry_value end) as Phone, 

MAX(case when field_id = 79 and entry_id = (SELECT MAX(entry_id) FROM ch_arf_entry_values) then (
            select distinct concat( 

SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',2),'"',2),'"',-1),
',',

SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',4),'"',4),'"',-1)
                             )
                         )
            end) as InterestedIn,


MAX(case when field_id = 81 and entry_id = (SELECT MAX(entry_id) FROM ch_arf_entry_values) then (

            select distinct concat( 

SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',2),'"',2),'"',-1),
',',
SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',4),'"',4),'"',-1),
',',               
SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',6),'"',6),'"',-1),
',',
SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',8),'"',8),'"',-1),
',',
SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',10),'"',10),'"',-1),
',',
SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',12),'"',12),'"',-1),
',',
SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',14),'"',14),'"',-1),
',',
SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',16),'"',16),'"',-1),
',',
SUBSTRING_INDEX(SUBSTRING_INDEX( SUBSTRING_INDEX(entry_value,'"',18),'"',18),'"',-1)                
                             )
                         )
            end) as Province,
'1' as Status,  
NOW() as DateRegistered
from ch_arf_entry_values 
WHERE entry_id = (SELECT MAX(entry_id) FROM ch_arf_entry_values)
GROUP BY entry_id
LIMIT 1
    )

不幸的是,它被写了好几次,只有最上面的条目是正确的 1,我想保留它,它具有所有值且没有 NULL:

892     test5   test5   test5@w.com     12345678909     Movable Assets,Movable Assets   NULL    1   2014-11-04 15:43:35

891     test5   test5   test5@w.com     12345678909     NULL                            NULL    1   2014-11-04 15:43:35

890     test5   test5   test5@w.com     NULL            NULL                            NULL    1   2014-11-04 15:43:35

889     test5   test5   NULL            NULL            NULL                            NULL    1   2014-11-04 15:43:35

888     test5   NULL    NULL            NULL            NULL                            NULL    1   2014-11-04 15:43:35

887     NULL    NULL    NULL            NULL            NULL                            NULL    1   2014-11-04 15:43:35

任何帮助将不胜感激。

【问题讨论】:

如果您可以在SQL Fiddle 中创建表的实例并插入语句,我可能会为您提供帮助 【参考方案1】:

您发布的问题可能没问题,但您不确定您到底需要什么。如果我正确理解了您的要求,那么这就是下面为您提供的答案。只需包含限制 null 值的 where 条件即可。

WHERE entry_id = (SELECT MAX(entry_id) FROM ch_arf_entry_values) AND firstname!=NULL and lastname!=NULL 

在此您可以包含不应为空值的列(例如电子邮件、电话和其他)。如果它不起作用,请不要犹豫,提出或发布问题。我们随时为您提供帮助。

【讨论】:

以上是关于插入另一个表时的MySQL触发器问题的主要内容,如果未能解决你的问题,请参考以下文章

sql 组织结构插入时的MYSQL触发器

如何编写 MySQL 触发器以将行插入另一个表?

Mysql - 创建触发器以根据插入另一个表中的行插入新行

将数据插入另一个表时触发以更新带有时间戳的表

MySQL触发器

从 MySQL 触发器调用 PHP 脚本