【问题标题】:Trigger MySql while using CONCAT inserting data is Null使用 CONCAT 插入数据时触发 MySql 为 Null
【发布时间】:2015-06-30 18:07:36
【问题描述】:

这是我在数据库中的某个表中插入后执行的查询。在这里,我得到 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 ", "  ? ")

这个问题是因为我在 CONCAT 中使用“new.fieldName”...我看到THIS 的问题他们在做同样的事情..当然它比我的复杂。

【问题讨论】:

  • 您正在数据库中即时构建 json?那只是……疯了……记住 sql null 具有传染性。如果您要连接的 ANY 字段本身为空,则整个结果将变为空。
  • 如果您要连接的任何字段本身都是空的...@MarcB 让我看看...可能这应该是问题....
  • 是的构建 json...因为无法创建所有字段...因为在此表中...超过 10 个表的数据将被保存用于记录...@MarcB ...我知道它很尴尬......但这是一个要求......
  • 好吧,那么至少为每个new.whatever 尝试IFNULL(x, ''),以便在它们为空时将它们转换为空字符串。
  • @MarcB 是的,谢谢

标签: mysql database triggers


【解决方案1】:

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

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

marcB 说:- 请记住 sql 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)

它检查字段的空值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2019-11-03
    • 2021-04-13
    • 1970-01-01
    • 2014-10-13
    • 2011-08-14
    • 2013-09-13
    相关资源
    最近更新 更多