2011-10-02 131 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替換新的數據。特別糟糕。

請考慮改變存儲該值的方式。也許是支持表。