使用序列号的MySQL更新生成空值

使用序列号的MySQL更新生成空值,mysql,Mysql,我想用一个相关条目的名称来更新列的值,并为每行添加一个数字。我已经看到了几个给出了大致相同的答案,但是当我尝试下面的方法时,我得到了空值 SET @i = 0; UPDATE matrix_data md SET col_id_4 = concat((SELECT title from titles t WHERE t.entry_id = md.entry_id), (@i:=@i+1)); 如果我用一个静态值替换@I:=@I+1,那么更新工作正常 col_id_4列设置为text。以上是否

我想用一个相关条目的名称来更新列的值,并为每行添加一个数字。我已经看到了几个给出了大致相同的答案,但是当我尝试下面的方法时,我得到了空值

SET @i = 0;
UPDATE matrix_data md
SET col_id_4 = concat((SELECT title from titles t WHERE t.entry_id = md.entry_id), (@i:=@i+1));
如果我用一个静态值替换@I:=@I+1,那么更新工作正常


col_id_4列设置为text。以上是否仅适用于数字列类型?如果是这样的话,我该如何实现我想要做的呢?

您如何使用titles表的主键而不是使用迭代器,从而用titles.title和titles.entry\u id的串联来填充col\u id\u 4,从而

或者这是一个典型的问题;当我们连接字符串时,将迭代器转换为char50应该可以工作。在基本数据库中测试,而不是专门在craftcms或eecms中测试

SET @i := 0;

UPDATE matrix_data 
INNER JOIN titles ON matrix_data.entry_id = titles.entry_id 
SET matrix_data.col_id_4 = CONCAT(titles.title, "_", CAST(@i := @i + 1 as CHAR(50)))

不如使用titles表的主键,而不是使用迭代器,这样用titles.title和titles.entry\u id的串联来填充col_id_4,这样

或者这是一个典型的问题;当我们连接字符串时,将迭代器转换为char50应该可以工作。在基本数据库中测试,而不是专门在craftcms或eecms中测试

SET @i := 0;

UPDATE matrix_data 
INNER JOIN titles ON matrix_data.entry_id = titles.entry_id 
SET matrix_data.col_id_4 = CONCAT(titles.title, "_", CAST(@i := @i + 1 as CHAR(50)))

如果条目id在标题中是唯一的,我会尝试在SELECT。。。e、 g.设置col_id_4=选择CONCATt.title,@i:=@i+1从t。。。。对于测试,我只运行SELECT本身,用一个文本代替md.entry_id,看看它是否返回NULL。如果这样做,输出仍然为NULL。我建议只测试SELECT本身。返回t.title和@i以及CONCAT表达式的结果,例如。从titles t中选择@i AS i0,CONCATt.title,@i:=@i+1,t.title,@i AS i2,其中t.entry_id=?唯一输出非NULL值的是t.title。是否确实执行了该语句来初始化@i?您可以显示一个语句来执行此操作。如果SELECT@i返回NULL,那么似乎SET@i=0语句没有执行。如果条目\u id在标题中是唯一的,我会尝试在SELECT中进行连接。。。e、 g.设置col_id_4=选择CONCATt.title,@i:=@i+1从t。。。。对于测试,我只运行SELECT本身,用一个文本代替md.entry_id,看看它是否返回NULL。如果这样做,输出仍然为NULL。我建议只测试SELECT本身。返回t.title和@i以及CONCAT表达式的结果,例如。从titles t中选择@i AS i0,CONCATt.title,@i:=@i+1,t.title,@i AS i2,其中t.entry_id=?唯一输出非NULL值的是t.title。是否确实执行了该语句来初始化@i?您可以显示一个语句来执行此操作。如果SELECT@i返回NULL,那么SET@i=0语句似乎没有执行;我只是一开始没有正确执行SET@I=0。结果证明我不需要使用cast;我只是一开始没有正确执行SET@I=0。