【问题标题】:Replacing specific value in MySQL Database替换 MySQL 数据库中的特定值
【发布时间】:2014-01-10 10:15:16
【问题描述】:

最近我一直在尝试找出一种方法来仅替换特定用户的列的一部分。 该系统是为项目列分层(-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 个帐户。因此替换脚本将仅指定给其中一个帐户。

【问题讨论】:

  • 你为此做了什么?
  • 这就是为什么我们总是试图建议人们规范他们的数据库
  • 对我来说似乎是一个非常糟糕的架构。为什么所有这些列?为什么不根据需要在其中插入(或更新)记录的表?
  • 数据库是由在当前团队之前开发游戏的团队预先构建的。由我和其他 10 个人组成。我是首席数据库开发人员和社区开发人员,我们有大约 12 个表,它们都是特定于某些东西的。其中一张表用于您的库存/背包中的物品。
  • @Luciferus:指定的-ve值是代表单行-多列还是多行-单列值?

标签: c# php mysql windows


【解决方案1】:

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

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”是一个空槽,连续 8 个是一个空库存。项目列几乎可以是 -1、1 - 65535 之间的所有内容,因此这不会很好,因为我需要在特定插槽中找到 -1 并仅替换那个插槽。
  • Oew.. 你必须使用某种正则表达式替换 mysql...在这里找到更多解决方案:stackoverflow.com/questions/986826/…
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-03-28
    • 2011-03-27
    • 2019-02-25
    • 2016-02-20
    • 2021-03-31
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多