我正在尝试为我的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,如果最好的方法是通过它。
我们非常感谢任何建议。 :)
答案 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
}