2011-01-26 156 views
0

我正在尝试为我的CMS做一个可定制和可扩展的配置文件系统。从用户角度来看,这很简单,但对于管理员而言,我希望所有数据(包括个人资料数据)都可以搜索到。配置文件字段可以通过“插件”添加,也可以添加新的字段进行搜索。我不知道我正在试图用MySQL来完成这项工作,或者如果我以完全错误的方式进行操作。选择MySQL行值作为列标题?

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

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

参数和值基本上是轮廓数据。例如,参数可以是“年龄”,并且该值可以是“22”。

我想要尝试做的是选择用户表,并将配置文件信息连接起来,以便将参数映射到其他列。因此,它结束了,像这样,直接从MySQL:

id email password access_level age 
1  [email protected] *****  1    22 
2  [email protected] *****  2    25 
3  [email protected] *****  2    25 

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

如果无法通过单个查询来完成,还有其他什么方法?我使用PHP,如果最好的方法是通过它。

任何建议将不胜感激。 :)

回答

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 
}