这是我在数据库中的某些表中插入后执行的查询。在这里我得到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他们正在做同样的事情..来源与我相比它没有那么复杂。
答案 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)
它检查字段的空值。