【问题标题】:Update and delete data in database mysql更新和删除数据库mysql中的数据
【发布时间】:2011-11-29 07:36:28
【问题描述】:

我使用 codeigniter。我在数据库行中有以下值作为 json_encode,我想删除第 1 行中的值 3 和数据库表中的值 145

删除 -> 第 1 行的值 3 和第 2 行的值 145
更新 -> 第 1 行的值 28 和第 2 行的值 317

如何查询它的值 json?

第 1 行:

id=1

[{
    "hotel_id": ["3"]
}, {
    "hotel_id": ["2"]
}, {
    "hotel_id": ["1"]
}]

第 2 行:

id=2

[{
    "hotel_id": ["14"]
}, {
    "hotel_id": ["5"]
}, {
    "hotel_id": ["4"]
}, {
    "hotel_id": ["3"]
}, {
    "hotel_id": ["2"]
}, {
    "hotel_id": ["1"]
}]

【问题讨论】:

  • 不要将 JSON 作为文本存储在数据库中,然后希望数据库能神奇地弄清楚如何处理它。
  • 我想知道在不了解数据或用户需求的情况下,某人说出“mongo”需要多长时间......
  • 数据库中的数据(数组)json不能删除和更新吗?
  • 等等,他真的是把数据库中的 JSON 保存为文本吗?!
  • +1 以平衡一些反对票。我不认为这是一个坏问题,这只是不好的做法,我们都在这里学习。最好解释为什么这是不好的做法,而不是我认为的反对票。

标签: php mysql codeigniter json


【解决方案1】:

大多数评论者想说的是,当在数据库中存储序列化数据(如 JSON 字符串)时,您的问题是一个非常常见的问题 - 这正是为什么这被认为是不好的做法。 一旦数据存储为数据库无法解析的一大堆字符,关系数据库的所有精彩工具,如根据任何列进行索引、排序、分组和查询,都将不复存在。

解决方案是将实际的 DATA 保存在 DB 中,并仅在应用程序端将其格式化为 JSON,以备需要时使用。 在您的情况下,您可以创建一个像 hotels_to_users 这样的表(我在这里对您的数据的含义进行了一些猜测,希望您能得到它,即使它不是您所需要的)。该表将如下所示:

user_id (?) |  hotel_id
1           |  1
1           |  2
2           |  14

这将使任何用户查询、更新、插入和删除任何特定酒店变得非常容易。

希望这是有道理的,并且您能够进行更改,否则您的问题可以通过一些 MySQL 字符串函数(如 REPLACE 和 SUBSTR)来解决,或者通过在应用程序代码中完成所有工作并保存新的 JSON 来解决完毕。无论哪种方式,从长远来看,维护它都会很困难并且需要更多的努力。

【讨论】:

    【解决方案2】:

    将数据存储为 json_encode 确实是一个糟糕的选择,因为您无法通过 sql 对它们进行任何操作。

    你必须获取你的数据,读取它(json_decode),用 php 做一些事情,然后用新的 json_encode 替换新数据。真的很糟糕。

    考虑改变存储这些值的方式。也许是一个支持表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      相关资源
      最近更新 更多