Php 将列值显示为表格标题,而不是其原始标题

Php 将列值显示为表格标题,而不是其原始标题,php,mysql,Php,Mysql,我在mySQL中得到了一个数据库,上面写着“Storage”,其中有一个名为“Storage_Det”的表。以下是“存储详细信息”的内容: 用php显示它对我来说没有问题。我的问题是:我想为我的新表视图显示“名称”、“位置”和“房间”,以便它显示如下: submissionid | name | position | room | -------------+--------+------------+------+ 1 | Alex | Manager

我在mySQL中得到了一个数据库,上面写着“Storage”,其中有一个名为“Storage_Det”的表。以下是“存储详细信息”的内容:

用php显示它对我来说没有问题。我的问题是:我想为我的新表视图显示“名称”、“位置”和“房间”,以便它显示如下:

submissionid | name   | position   | room |
-------------+--------+------------+------+
1            | Alex   | Manager    | 3-10 |
2            | Ben    | Accountant | 2-05 |
3            | Denny  | Marketing  | 1-03 |
既然我是这里的新手,我需要你的帮助。请让我知道。谢谢

好的,我想我必须先补充一些细节,才能把我的问题弄清楚


“表号2”不是真实的表。它是根据表1中存储的数据生成的。正如您在“表1”数据中看到的,“名称”、“位置”和“房间”将是“表2”中的“表头”。我希望这已经足够清楚了。

现在我更好地理解了你的问题,这里有一个方法:

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;

首先,将所有数据分组为某个
submissionid
,如下所示(假设使用非常基本的mysql API):

现在,首先显示列名:

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('submissionid');
//获取$sIdGroup中的第一行(我假设1并不总是第一个索引)
重置($sIdGroup);
$firstSubmissionId=密钥($sIdGroup);
foreach($sIdGroup[$firstSubmissionId]作为$key=>$dummy)
{
回声($key);
}
现在数据是:

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>' );
echo(“”);
foreach($sIdGroup作为$submissionId=>$data)
{
echo($submissionId);
foreach($key=>$value形式的数据)
{
回音($value);
}
回声(“”);
}
回声(“”);

如果您希望查询提供您所请求的数据显示方式,您可以使用以下方法:

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'

呃,为什么在原始表中没有name、room和position列呢?Valueid=autoincrement,formid标识提交数据的表单,submissionid告诉我们相同的数字属于同一组提交。我们得到了它。我们只是想知道为什么一号桌的布局一开始不像二号桌。基本上你的数据库没有正常化,这是不好的。谢谢你的回复,但你误解了我的意思。表2由表1生成。这不是真的桌子。我的意思是,我需要操纵1号表,这样它就会显示“2号表”。啊,好吧,我确实误解了,我会再试一次,然后回来谢谢你们回答我,我接受了@Adam Wenger的答案,因为他简单而有力的解决方案。案件结案!
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>' );
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'