使用CONCAT插入数据时触发MySql是Null

时间:2015-06-30 18:07:36

标签: mysql database triggers

这是我在数据库中的某些表中插入后执行的查询。在这里我得到rate_like_id和所有其他字段我也保存它们但是当我使用CONCAT并尝试将它们保存为json时它会通过触发器插入NULL值。

这是一种错误的方法吗?还有其他任何方式我可以通过触发器mysql保存这种类型的数据。

INSERT INTO `log_activity`(`visitor_id`,
                       `rating_like_id`,
                       `type`,
                       `response`,
                       `created_by`,
                       `created_date`)
VALUES (new.created_by,
    new.rating_like_id,
    CASE WHEN new.is_like = NULL THEN "Rating" ELSE "Like" END ,
    -- Here is this column Should not be null but it is coming null when INSERTED 
    CONCAT(
   '{"card_id":','"',new.card_id,'"',
   ',"card_type":','"',new.card_type,'"',
   ',"user_id":','"',new.user_id,'"',
   ',"is_like":','"',new.is_like,'"',
   ',"has_rated":','"',new.has_rated,'"',
   ',"rate":','"',new.rate,'"',
   ',"created_by":','"',new.created_by,'"',
   ',"created_date":','"',new.created_date,'"',
   ',"card_type":','"',new.card_type,'"','}'),
    new.created_by,
    new.created_date)

这有什么问题..所有其他字段都正确保存只有CONCAT字段没有正确插入。

是的我可以像这样插入值

CONCAT(" hi "," how "," are "," you ", "  ? ")

这是问题,因为我正在使用" new.fieldName"在CONCAT里面......我看到THIS他们正在做同样的事情..来源与我相比它没有那么复杂。

1 个答案:

答案 0 :(得分:-1)

如果你看到我和marcB之间的评论和对话......你会得到答案......

在这里,我想展示我对查询所做的更改,以使其正常工作。

  marcB说: - 请记住,sql null具有传染性。如果您要连接的任何字段本身为null,则ENTIRE结果将变为空

所以你可以看到我的查询有问题..我没有检查任何值是否为null。所以我只需要添加空检查。

INSERT INTO `log_activity`(`visitor_id`,
                       `rating_like_id`,
                       `type`,
                       `response`,
                       `created_by`,
                       `created_date`)
VALUES (new.created_by,
    new.rating_like_id,
    CASE WHEN new.is_like = NULL THEN "Rating" ELSE "Like" END,
    CONCAT('{"card_id":',
           '"',
           IFNULL(new.card_id, ''),
           '"',
           ',"card_type":',
           '"',
           IFNULL(new.card_type, ''),
           '"',
           ',"user_id":',
           '"',
           IFNULL(new.user_id, ''),
           '"',
           ',"is_like":',
           '"',
           IFNULL(new.is_like, ''),
           '"',
           ',"has_rated":',
           '"',
           IFNULL(new.has_rated, ''),
           '"',
           ',"rate":',
           '"',
           IFNULL(new.rate, ''),
           '"',
           ',"created_by":',
           '"',
           IFNULL(new.created_by, ''),
           '"',
           ',"created_date":',
           '"',
           IFNULL(new.created_date, ''),
           '"',
           ',"card_type":',
           '"',
           IFNULL(new.card_type, ''),
           '"',
           '}'),
    new.created_by,
    new.created_date)

它检查字段的空值。