2011-10-02 132 views
-2

我使用codeigniter。我有以下值作为数据库行中的json_encode,我想要删除值3第1行和值14 & 5在数据库表中。更新和删除数据库中的数据库mysql

DELETE - >上的行1个&值值3145上行2
UPDATE - >值28在行1个&值317上的行2.

如何查询它用于值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

数据库中的CSV是邪恶的。 – Johan

+1

不要将JSON作为文本存储在数据库中,然后希望数据库能够神奇地找出如何处理它。 –

+1

调查mongodb。 – solidau

回答

1

然而,大多数评论者都试图说的是,你的问题是在数据库中存储序列数据时,一个很普通的一个(像JSON字符串) - 这正是为什么这被认为是不好的做法。 一旦数据存储为一大堆数据库无法解析的字符,关系数据库的所有奇妙工具(如索引,排序,分组和查询)都会消失。

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

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

这将使它很容易查询,更新,插入和删除任何特定的酒店给任何用户。

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

0

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

你必须把你的数据,读取它(json_decode),做php的东西,然后用新的json_encode替换新的数据。特别糟糕。

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