Php 向MySQL结果添加动态列

Php 向MySQL结果添加动态列,php,mysql,Php,Mysql,我在mysql中有一个表,我们称它为foo,它的列数是有限的 | id | name | date | -------------------------- | 1 | bar | 2012-05-08 | | 2 | buba | 2012-05-09 | 我的用户可以将记录添加到表foo\u字段(例如,code,description,time…) 在表foo\u field\u value中存储用户定义字段的值,如下所示: | id | foo_id | foo_fie

我在mysql中有一个表,我们称它为
foo
,它的列数是有限的

| id | name |    date    |
--------------------------
| 1  | bar  | 2012-05-08 |
| 2  | buba | 2012-05-09 |
我的用户可以将记录添加到表
foo\u字段
(例如,
code
description
time
…)

在表
foo\u field\u 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_字段在foo_fields_value表上进行内部联接(通过先执行另一个查询来使用PHP生成查询),这是否可能呢

您要查找的是pivot查询。由于您有需要转换为列的动态字段,请查看本文中有关生成自动透视查询的内容


只需一次就可以完成,而且非常简单

我们将稍微修改foo_字段表,添加一个与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 |

我仍然不确定我是否理解你的问题。如果您想创建真正的动态值和数据结构,我建议您将数组保存到数据库中的字段中,但如果是这种情况,我也建议您忽略您的解决方案;如果您希望您的解决方案能够增长,您需要尽可能严格地管理结构。

每个foo记录是否可以有多个foo_字段值?是的,对代码=b,描述=LAL,time=12:00在foo_字段中有3条单独的记录,它们都与foo记录id 1有关。您误解了我的数据库结构,恐怕我会详细介绍我的操作。
| 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 |