更新和删除数据库mysql中的数据

时间:2011-10-02 07:07:03

标签: php mysql codeigniter json

我使用 codeigniter 。我在数据库行中有以下值作为json_encode,我希望在第1行中删除值3并且值14&数据库表中的5

DELETE - >第1行和第1行的值3第2行的值145 更新 - >第1行和第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"]
}]

2 个答案:

答案 0 :(得分:1)

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

解决方案是将实际DATA保存在数据库中,并仅在应用程序端将其格式化为JSON,以便在需要时使用。 在你的情况下,你可以创建一个像hotels_to_users这样的表(我在这里做一些关于数据意义的猜测,希望你得到它,即使它不是你需要的)。该表格如下:

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

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

希望这是有意义的,并且您可以进行更改,否则您的问题可以通过一些MySQL字符串函数(如REPLACE和SUBSTR)解决,或者通过在应用程序代码中完成所有工作并在保存新JSON时解决完成。无论哪种方式,维持它将是困难的,并且需要更长期的努力。

答案 1 :(得分:0)

将数据存储为json_encode确实是一个糟糕的选择,因为你不能通过sql做任何事情。

您必须获取数据,读取它(json_decode),使用php执行操作,然后使用新的json_encode替换新数据。真的很糟糕。

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