2011-11-18 202 views
0

所以我有一個應用程序和一個非常煩人的客戶端,他們改變了主意,因此我決定將一些數據存儲爲JSON對象。從php中查詢JSON數據庫對象php

我有一種匹配系統,我將註冊匹配的用戶存儲爲其用戶ID數組的JSON對象版本。

我想顯示一個用戶已經註冊的所有匹配作爲我的一個篩選器選項,所以我基本上需要查看該用戶的id是否存儲在文本類型數據對象中。

兩種方式我能想到做到這一點是:

  1. 查詢每一個匹配和對象,然後JSON-解碼使用in_array,看看他們在比賽中(這是我沒有不做)。

  2. 只需使用LIKE查詢來搜索「[userid]」(這是我所做的)的JSON文本。

有沒有更好的方法來做這樣的事情?像MySQL有更好的內置函數來實現這樣的功能嗎?

+1

爲什麼不將對象存儲爲每個屬性字段的記錄?我們可以看到對象的一個​​例子嗎?將JSON字符串存儲到數據庫中並查詢字符串的某些部分並不是一個好習慣。 –

+1

你爲什麼要在MySQL中存儲json以開始? –

+0

您使用的是ORM嗎?哪一個? – 2011-11-18 16:27:47

回答

4

嘗試將用戶數據存儲在關係數據庫(如MySQL)的JSON對象中是一個錯誤。你的數據庫不是面向對象的,它是關係型的。遵循關係數據庫的規則將很好地爲您服務。建立一個好的數據庫(DB)結構並執行準確的MySQL查詢會更好。

如果你保持你的數據庫至少在third normal form,你會發現你可以添加和更改用戶屬性,當你的客戶改變主意時(再次......再次......再次......),因爲更少的數據將保存在給定的表中,因此您可以添加和更改小型表,而不會產生巨大的系統範圍影響。

數據庫中的另一個選擇是創建一個由id,name和value組成的表。

+0

我同意Chris的觀點,您應該重新訪問您的模式設計,並通過從數據庫中提取數據而不是預先構建的JSON對象將JSON構造留在應用層。 –

+0

如果你在上面閱讀我的評論,可以將它們結合起來。你能解釋爲什麼它是一個錯誤?我認爲,僅僅因爲某事不應該以某種方式發揮作用並不意味着它不能或不應該。然而,如果它是一個表演的東西,那麼我會立即放棄這一點。 – Rooster

+0

另外,如果你看看一個基於zend框架的社交引擎4這樣的平臺,看起來好像在一個網站上有一千個表被一千個表控制的事情真的會損害性能。 – Rooster