替换MySQL数据库中的特定值

时间:2014-01-10 10:15:17

标签: c# php mysql windows

最近我一直试图找到一种方法,以便只替换特定用户的一部分列。 系统是为游戏制作的,其中items列是分层的(-1,-1,-1,-1,-1,-1,-1,-1)......我需要一种方法来替换其中一个那些带有新值的值,但是当我无法弄清楚如何去做时。

作为我需要实现的一个例子 旧项目 - (-1,-1,-1,-1,-1,-1,-1,-1) 新项目 - (1838,-1,-1,-1,-1,-1,-1,-1)

下次你做同样的事情时它会替换下一个-1值。

非常感谢能帮助我弄清楚如何做到这一点的人。

- 编辑 - 我忘了提到我们有超过4000个帐户。所以替换脚本将仅指定给其中一个帐户。

2 个答案:

答案 0 :(得分:0)

如果数据位于数据库的一列中,您可以尝试替换命令

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘(-1, -1, -1, -1, -1, -1, -1, -1)’, ‘(1838, -1, -1, -1, -1, -1, -1, -1)’);

答案 1 :(得分:0)

为了速度和可用性,您应该考虑将这些数组分解为规范化数据。但是,解决方案是:

用子串索引打破你的字符串。

set @a='(-1, -1, 2, -1, -1, -1, -1, -1)';
set @pos=3;
SELECT 
concat(
SUBSTRING_INDEX(@a, ',', @pos-1), -- before item 3
' ,', -- separator
SUBSTRING_INDEX(SUBSTRING_INDEX(@a, ',', @pos),',', -1), -- item 3
' ,', -- separator
SUBSTRING_INDEX(@a, ',', -(8-@pos)) -- after item 3, in an array of 8 items; you could find array length dinamically by replacing comas with "" and comparing new string length to old length +1
)
   >'(-1, -1, 2, -1, -1, -1, -1, -1)'

更新:

update table user_items
set items= concat(
    SUBSTRING_INDEX(items, ',', @pos-1), -- before item 3
    ' ,', -- separator
    'NEW ITEM HERE',
    ' ,', -- separator
    SUBSTRING_INDEX(items, ',', -(8-@pos)) -- after item 3
    )
where user_id=1