2011-01-26 149 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 
}