2013-04-22 156 views
0

我有一個MySQL表看起來像這樣搜索:保存在MySQL領域陣列和在該領域

id 
some_field1 
some_field2 
variable_fields 
datetime 
... 

現在我想在variable_fields存儲超過1倍的值是這樣的:

user_id:5;message_id:10 

爲什麼我不爲每個想要存儲的值創建單獨的字段,原因是這些值在整個項目中有所不同。所以我在項目中存儲了不同的值。 在一段時間variable_fields包含此值:

user_id:5;message_id:10 

而在其他一些時候它所含的這個值:

car_id:56;payment_id:45 

這不會是一個大問題,但我希望能夠在搜索這個領域。所以像這樣:variable_fields LIKE '%payment_id:45%'.

這顯然需要時間的MySQL ..是否有另一種方式來處理,而不是爲每個值創建一個字段?那麼mysql中的某種動態字段?

我很高興爲您提供各種幫助。先謝謝你!

最好的問候,

弗雷迪

+4

對我來說,聽起來你不想每個字段都有一張表,而是一個全新的表,其中包含一個「父類型ID」的「類型」和「ID」,它是與其相關的行的ID在你當前的表格中。通過這種方式,您可以通過Type和/或Parent ID'(SELECT FROM newtable WHERE Type ='user_id'和ParentID = $ ID)''輕鬆獲取用戶ID或汽車ID等。存儲數組的值是完全可能的,但通常被認爲是不好的數據庫設計,因爲它極大地增加了代碼的複雜性,同時阻礙了數據庫的性能。 – MatthewMcGovern 2013-04-22 09:53:57

回答

0

如果您將添加一個MyISAM全文索引或使用該列任何其他全方位的文本工具(如斯芬克斯,Lucene的)那些你描述將工作搜索好得多,但這不可取。

我會建議要麼將動態元數據劃分成不同的表,並在主表中保留一個type_id,要麼爲所有默認設置爲NULL的選項保留列。真的取決於是否有簡單的劃分,或者這真的是動態的,並隨着時間的推移而變化。如果您將數據分解到多個表中,根據type_id的JOIN將賦予查詢這些特定字段值的能力。請務必在共同編號的兩個表格中創建一個索引。