2012-05-08 163 views
1

我在mysql中有一個表,我們將其稱爲foo並且它的列數有限。將動態列添加到MySQL結果

| id | name | date | 
-------------------------- 
| 1 | bar | 2012-05-08 | 
| 2 | buba | 2012-05-09 | 

我的用戶可以添加記錄表foo_field(東西一樣,codedescriptiontime ...)。

| id | name  | 
-------------------- 
| 1 | code  | 
| 2 | description | 
| 3 | time  | 

在表foo_field_value爲用戶自定義字段中的值存儲,就像這樣:

| id | foo_id | foo_field_id | value  | 
------------------------------------------ 
| 1 | 1  | 1   | b   | 
| 2 | 1  | 2   | Lalalala | 
| 3 | 1  | 3   | 12:00  | 
| 1 | 2  | 1   | c   | 
| 2 | 2  | 2   | We are go | 
| 3 | 2  | 3   | 14:00  | 

理想情況下,我會想一個查詢,這將使我喜歡

結果
| id | name | date  | code | description | time | 
------------------------------------------------------ 
| 1 | bar | 2012-05-08 | b | Lalalala | 12:00 | 
| 2 | buba | 2012-05-09 | c | We are go | 14:00 | 

這甚至可能沒有在每個foo_field的foo_fields_value表上進行內部連接(通過首先執行另一個查詢來使用PHP生成查詢)。

+0

對於每個foo記錄,是否可以有多個foo_field_value? –

+0

是的,對碼= b,description = lalalal,time = 12:00是foo_fields_value中的3條記錄,全部與foo記錄ID 1相關。 – Bram

回答

2

這是可能做到這一點的只有一個,而且非常簡單。

我們將稍微修改foo_field表,添加一個與foo表的id列相對應的列,我假設它是主鍵。

所以現在我們有

* foo 
|------| 
| id | 
| name | 
| date | 
|------| 

* foo_field 
|-------------| 
| foo_id  | 
| code  | 
| description | 
| time  | 
|-------------| 

這意味着我們可以用一個簡單的查詢添加額外的字段:

SELECT * FROM foo 
LEFT JOIN foo_field ON foo.id = foo_field.foo_id 

這將給我們一個結果集的

| id | name |  date | foo_id | code | description |  time | 
|----+-------+------------+--------+--------+-------------+----------| 
| 1 | asdw | 2012-05-16 |  1 | asdasd | asdasd  | 15:03:41 | 
| 2 | fdgfe | 2012-05-18 |  2 | asdas | asdas  | 15:03:41 | 
| 3 | asdw | 2012-05-16 |  3 | asdas | asdas  | 15:03:52 | 
| 4 | fdgfe | 2012-05-18 |  4 | asdasd | asdasd  | 15:03:52 | 

我仍然不確定我是否理解你的問題。如果你想創建真正的動態值和數據結構,我建議你將一個serialized數組保存到數據庫的TEXT字段中,但是如果是這種情況,我也建議你忽略你的解決方案;如果您希望您的解決方案能夠發展壯大,您希望儘可能嚴格管理結構。

+0

您誤解了我的數據庫結構恐怕,我會詳細介紹我的OP更多。 – Bram