2012-03-24 40 views
0

我在mySQL中獲得了一個數據庫,讓「Storage」中有一個名爲「Storage_Det」的表格。這裏是「Storage_Det」的內容:將列值顯示爲表格標題而不是原始的列表

valueid | formid | submissionid | fieldname | fieldvalue 
--------+--------+---------------+-------------+------------- 
1  | 1  | 1   | name  | Alex 
2  | 1  | 1   | position | Manager 
3  | 1  | 1   | room  | 3-10 
4  | 1  | 2   | name  | Ben 
5  | 1  | 2   | position | Accountant 
6  | 1  | 2   | room  | 2-05 
7  | 1  | 3   | name  | Denny 
8  | 1  | 3   | position | Marketing 
9  | 1  | 3   | room  | 1-03 

對於我用php顯示它沒有任何問題。我的問題是:我要顯示我的新表視圖「名」,「位置」和「房間」,這樣它會顯示這樣的:

submissionid | name | position | room | 
-------------+--------+------------+------+ 
1   | Alex | Manager | 3-10 | 
2   | Ben | Accountant | 2-05 | 
3   | Denny | Marketing | 1-03 | 

因爲我在這裏是一個新手,我需要你幫幫我。請告訴我。謝謝。

好的,我想我必須在之前添加一些細節,以使我的問題足夠清晰。

「表號2」不是實數表。它是根據表1中存儲的數據生成的。正如您在「表號1」中看到的那樣,「名稱」,「位置」和「房間」中的數據將是「表號2」中的「表頭」。我希望這很清楚。

+2

EHH,你爲什麼不只是名字,室,在原始表格中放置列? – dqhendricks 2012-03-24 18:24:48

+0

Valueid = autoincrement,formid標識數據提交的形式,submitid告訴我們同一個數字屬於同一組提交。 – Yohanes 2012-03-25 02:25:59

+0

我們明白了。我們只是想知道爲什麼第一張桌子沒有像第二張桌子那樣放在首位。基本上你的數據庫沒有正常化,這是不好的。 – dqhendricks 2012-03-25 07:18:34

回答

0

如果你想查詢給你顯示的數據你怎麼要求,你可以使用以下命令:

SELECT DISTINCT sd.SubmissionId 
    , sdName.FieldValue AS Name 
    , sdPosition.FieldValue AS Position 
    , sdRoom.FieldValue AS Room 
FROM Storage_Det AS sd 
LEFT JOIN Storage_Det AS sdName ON sd.SubmissionId = sdName.SubmissionId 
    AND sdName.FieldName = 'Name' 
LEFT JOIN Storage_Det AS sdPosition ON sd.SubmissionId = sdPosition.SubmissionId 
    AND sdPosition.FieldName = 'Position' 
LEFT JOIN Storage_Det AS sdRoom ON sd.SubmissionId = sdRoom.SubmissionId 
    AND sdRoom.FieldName = 'Room' 
+0

謝謝你們回答我,我拿着@Adam Wenger的答案來說明他那簡單而強大的解決方案。案件結案! – Yohanes 2012-03-26 04:15:39

1

現在我更好地瞭解您的問題在這裏是一種方法:

CREATE TEMPORARY TABLE `table2` (
`submissionid` INT NOT NULL , 
`name` VARCHAR(50) NOT NULL , 
`position` VARCHAR(50) NULL , 
`room` VARCHAR(50) NULL 
) ENGINE = MYISAM ; 

ALTER TABLE `table2` 
ADD UNIQUE (
`submissionid` , 
`name` , 
`position` , 
`room` 
); 

insert table2 (submissionid, name) select submissionid, fieldvalue from table1 where fieldname='name'; 
update table2 set position = (select fieldvalue from table1 where fieldname='position' and table1.submissionid = table2.submissionid); 
update table2 set room = (select fieldvalue from table1 where fieldname='room' and table1.submissionid = table2.submissionid); 


select * from table2; 
+0

感謝您的回覆,但您誤解了我的意思。表號2是從表號1生成的。它不是實數表。我的意思是,我需要操縱表號1,以便它顯示「表號2」。 – Yohanes 2012-03-25 02:41:43

+0

ah ok我的確誤解了,我會盡力回覆 – sdjuan 2012-03-25 05:19:04

0

首先,集團所有的數據一定submissionid像這樣(假設非常基本的mysql API):

$sIdGroup = array(); 
while ($row = mysql_fetch_assoc($result)) 
{ 
    if (!isset($sIdGroup[ $row[ "submissionid" ] ])) 
    { 
     $sIdGroup[ $row[ "submissionid" ] ] = array(); 
    } 

    $sIdGroup[ $row[ "submissionid" ] ][ $row[ "fieldname" ] ] = $row[ "fieldvalue" ]; // Save the value for the current field 
} 

現在顯示,第一列名:

echo('<table><tr><td>submissionid</td>'); 

// Get the first row in $sIdGroup (i'm assuming 1 is not always the first index) 

reset($sIdGroup); 
$firstSubmissionId = key($sIdGroup); 

foreach ($sIdGroup[ $firstSubmissionId ] as $key => $dummy) 
{ 
    echo("<td>$key</td>"); 
} 

現在數據:

echo('</tr>'); 

foreach ($sIdGroup as $submissionId => $data) 
{ 
    echo("<tr><td>$submissionId</td>"); 
    foreach ($data as $key => $value) 
    { 
     echo("<td>$value</td>"); 
    } 
    echo('</tr>'); 
} 

echo('</table>'); 
相關問題