我使用 codeigniter 。我在数据库行中有以下值作为json_encode,我希望在第1行中删除值3
并且值14
&数据库表中的5
。
DELETE - >第1行和第1行的值3
第2行的值14
,5
更新 - >第1行和第1行的值2
到8
第2行的值3
到17
。
如何查询值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"]
}]
答案 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替换新数据。真的很糟糕。
考虑改变存储这些值的方式。也许是支持表。