选择MySQL行值作为列标题?

时间:2011-01-26 16:43:25

标签: php mysql pivot-table

我正在尝试为我的CMS执行可自定义和可扩展的配置文件系统。从用户的角度来看,它是直截了当的,但对于管理员,我希望所有数据(包括配置文件数据)都是可搜索的。可以通过“插件”添加配置文件字段,这也可以添加要搜索的新字段。我不知道我是否正在尝试用MySQL来完成这项工作,或者我是否完全采用了错误的方法。

所以我将用户存储在一个表(用户)中,其中包含id,email,password和access_level列。

然后我有另一个包含配置文件信息(配置文件)的表,存储为user_id,参数和值。该参数最终可以再次放入一个单独的表中(因此它不会重复自己),但是现在我会这样离开它。

参数和值基本上是配置文件数据。例如,参数可以是“年龄”,值可以是“22”。

我想要尝试做的是选择users表,同时加入配置文件信息,以便将参数映射到其他列。所以它最终是这样的,直接来自MySQL:

id    email    password    access_level   age
1     a@a.com  *****       1              22
2     b@b.com  *****       2              25
3     c@c.com  *****       2              25

我整个下午一直在寻找数据透视表,但从中我可以看到“列名”是预先定义的。在这种情况下,我希望“列名称”来自行本身。

如果单个查询无法执行此操作,还有哪些其他方法?我正在使用PHP,如果最好的方法是通过它。

我们非常感谢任何建议。 :)

1 个答案:

答案 0 :(得分:2)

好吧,如果您需要提前知道列名,可以查询information_schema数据库:

SELECT COLUMN_NAME
FROM information_schema.COLUMNS
WHERE TABLE_NAME='your table'

然而,它获取原始列名称。如果您的查询中存在别名,则必须间接获取它们:

SELECT somefield AS alias1, otherfield AS alias2
FROM ...

然后

$stmt = mysql_query($query);
$first = true;
while($row = mysql_fetch_assoc($stmt)) {
   if ($first) {
      $column_names = array_keys($row);
      ... display column names here
      $first = false;
   }
   ... output row here
}