使用PHP检查前值和当前值(数组)创建表
这是我的数据表1。我想把这张桌子改成一张桌子。我必须使用PHP来实现这一点。我使用foreach编写了一些代码,但这不能正常工作。C 表1 我想使用PHP创建类似于table2的内容 表2 **我写了一些这样的。但这并不正常**使用PHP检查前值和当前值(数组)创建表,php,mysql,Php,Mysql,这是我的数据表1。我想把这张桌子改成一张桌子。我必须使用PHP来实现这一点。我使用foreach编写了一些代码,但这不能正常工作。C 表1 我想使用PHP创建类似于table2的内容 表2 **我写了一些这样的。但这并不正常** $output .= "<table border=1> <tr bgcolor=#ffffff><td>SeqNo</td> <td>Student Id</td
$output .= "<table border=1>
<tr bgcolor=#ffffff><td>SeqNo</td>
<td>Student Id</td>
<td>maths</td>
<td>art</td>
<td>Exam 1</td>
<td>Exam 2</td></tr>";
$studentCounter = 0;
foreach($result as $item)
{
$output .= "<tr><td>" . ++$studentCounter . " </td>
<td>" . $item[STUDENT_ID] . "</td>
<td>" . $item[MATHS] . "</td>
<td>" . $item[ART] . "</td>
<td>" . $item[EXAM_1] . "</td>
<td>" . $item[EXAM_2] . "</td></tr>";
}
$output .= "</table>";
这是我的数组数据。我必须使用这个数组创建类似table2的内容。任何人都可以帮助我。如果我理解正确,您希望表2如图所示,因此基于此,我将回答您的问题 您可以使用下面的HTML,它看起来像您想要的表格
<table border=1>
<tr bgcolor=#ffffff>
<td>SeqNo</td>
<td>Student Id</td>
<td colspan = "2">maths</td>
<td colspan = "2">art</td>
</tr>
<tr>
<td colspan = "2"></td>
<td>Exam 1</td>
<td>Exam 2</td>
<td>Exam 1</td>
<td>Exam 2</td>
</tr>
<tr>
<td></td>
<td></td>
<td>Exam 1</td>
<td>Exam 2</td>
<td>Exam 1</td>
<td>Exam 2</td>
</tr>
</table>
请记住,这是没有SQL的,因此请调整它以满足您的需要,并处于PDO中。这将是您的表设计: 现在,要使用php显示数据,可以执行以下操作:
$output .= "<table border=1>
<tr bgcolor=#ffffff>
<td rowspan="2">SeqNo</td>
<td rowspan="2">Student Id</td>
<td colspan = "2">maths</td>
<td colspan = "2">art</td>
</tr>
<tr>
<td>Exam 1</td>
<td>Exam 2</td>
<td>Exam 1</td>
<td>Exam 2</td>
</tr>";
$studentCounter = 0;
foreach($result as $item)
{
$output .= "<tr>
<td>" . ++$studentCounter . " </td>
<td>" . $item[STUDENT_ID] . "</td>
<td>" . $item[MATHS_EXAM_1] . "</td>
<td>" . $item[MATH_EXAM_2] . "</td>
<td>" . $item[ART_EXAM_1] . "</td>
<td>" . $item[ART_EXAM_2] . "</td>
</tr>";
}
$output .= "</table>";
现在取决于$result的外观 您可以使用sql by group_concat mysql函数生成结果
SELECT * FROM table1 GROUP_CONCAT(student_id) ORDER BY subject_name DESC
此查询将生成如下结果
student id=>1,subject=>math,exam1=>15,exam2=>20,subject=>art,exam1=>17,exam2=>19
Rowspan告诉单元格要占用多少行,colspan告诉单元格要占用多少列
$output .= "<table border=1>
<tr bgcolor=#ffffff>
<td rowspan="2">SeqNo</td>
<td rowspan="2">Student Id</td>
<td colspan="2">maths</td>
<td colspan="2">art</td>
</tr>
<tr>
<td>Exam 1</td>
<td>Exam 2</td>
<td>Exam 1</td>
<td>Exam 2</td>
</tr>";
$studentCounter = 0;
foreach($result as $item) {
$output .= "<tr>
<td>" . $studentCounter++ . " </td>
<td>" . $item["STUDENT_ID"] . "</td>
<td>" . $item["MATHS"] . "</td>
<td>" . $item["ART"] . "</td>
<td>" . $item["EXAM_1"] . "</td>
<td>" . $item["EXAM_2"] . "</td></tr>";
}
$output .= "</table>";
试一下,我没有检查输出,我假设数组如下
array(
[
"STUDENT_ID" => "1",
'MATHS' =>
array(
"EXAM_1" => 'test 1',
"EXAM_2" => 'test2'),
'ART' =>
array(
"EXAM_1" => 'test 1',
"EXAM_2"=> 'test2')
],
[
"STUDENT_ID" => "2",
'MATHS' =>
array(
"EXAM_1" => 'test 1',
"EXAM_2" => 'test2'),
'ART' =>
array(
"EXAM_1" => 'test 1',
"EXAM_2"=> 'test2')
]
);
`
在我看来,您使用的表结构不正确 这是您要查找的表布局的正确表结构
<table border=1>
<thead>
<tr>
<th rowspan="2">Seq N0</th>
<th rowspan="2">Student Id</th>
<th colspan="2">maths</th>
<th colspan="2">art</th>
</tr>
<tr>
<td>Exam 1</td>
<td>Exam 2</td>
<td>Exam 1</td>
<td>Exam 2</td>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>1</td>
<td>82</td>
<td>90</td>
<td>60</td>
<td>82</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>82</td>
<td>90</td>
<td>60</td>
<td>82</td>
</tr>
</tbody>
</table>
请核对表1。有相同的学生id将重复。那么这个代码不能正常工作。有没有办法调整你的$result?一个StudentID总是有两个条目吗?不是总是有两个条目,有时一个StudentID有三个条目。您可以调整SQL吗?你应该把数学和艺术考试排成一行。然后,您可以使用foreach获得所需的设计。否则,您必须首先对数组进行排序,然后使用foreach$QI=DBQuery$sql检查数组$结果=DBGet$QI,数组'STUDENT\u ID'=>'STUDENT\u ID','mathematics'=>'mathematics','艺术“=>”艺术“,”考试1'=>'考试1’,“考试2”=>'考试2'$列=数组'STUDENT_ID'=>'STUDENT ID'、'Mathematics'=>'Mathematics'、'ART'=>'ART'、'EXAM_1'=>'EXAM 1'、'EXAM_2'=>'EXAM 1';这是我的sql数组请检查表1。有相同的学生id将重复。然后这个代码不能正常工作。正如我告诉你的,我给了你一个例子,你没有发布任何SQL或任何其他需要的代码,所以我只是凭直觉。接受这个想法并调整它直到它起作用。我的代码不是复制粘贴并运行它只是一个例子。如何检查repeat student,然后我必须转到另一个记录。按student id对记录进行分组。我想创建PHP代码。我有1000多条记录。不是HTML代码,我想要PHP代码。你必须检查表1。有学生证重复。然后我必须检查,然后再检查另一个主题名称。我该怎么做?你写过任何查询吗?你可能想把你当前的sql添加到OP中。你必须检查表1。有学生证重复。然后我必须检查,然后再检查另一个主题名称。我该怎么做呢?如果可能的话,使用类似于为同一个学生分组所有科目的标记,请参考
SELECT * FROM table1 GROUP_CONCAT(student_id) ORDER BY subject_name DESC
student id=>1,subject=>math,exam1=>15,exam2=>20,subject=>art,exam1=>17,exam2=>19
$output .= "<table border=1>
<tr bgcolor=#ffffff>
<td rowspan="2">SeqNo</td>
<td rowspan="2">Student Id</td>
<td colspan="2">maths</td>
<td colspan="2">art</td>
</tr>
<tr>
<td>Exam 1</td>
<td>Exam 2</td>
<td>Exam 1</td>
<td>Exam 2</td>
</tr>";
$studentCounter = 0;
foreach($result as $item) {
$output .= "<tr>
<td>" . $studentCounter++ . " </td>
<td>" . $item["STUDENT_ID"] . "</td>
<td>" . $item["MATHS"] . "</td>
<td>" . $item["ART"] . "</td>
<td>" . $item["EXAM_1"] . "</td>
<td>" . $item["EXAM_2"] . "</td></tr>";
}
$output .= "</table>";
array(
[
"STUDENT_ID" => "1",
'MATHS' =>
array(
"EXAM_1" => 'test 1',
"EXAM_2" => 'test2'),
'ART' =>
array(
"EXAM_1" => 'test 1',
"EXAM_2"=> 'test2')
],
[
"STUDENT_ID" => "2",
'MATHS' =>
array(
"EXAM_1" => 'test 1',
"EXAM_2" => 'test2'),
'ART' =>
array(
"EXAM_1" => 'test 1',
"EXAM_2"=> 'test2')
]
);
$output .= "<table border=1>
<tr bgcolor=#ffffff><td>SeqNo</td>
<td>Student Id</td>
<td colspan="2">maths</td>
<td colspan="2">art</td>
";
$studentCounter = 0;
foreach($result as $item)
{
$output .= "<tr><td>" . ++$studentCounter . " </td>
<td>" . $item[STUDENT_ID] . "</td>
<td>" . $item[MATHS][EXAM_1] . "</td>
<td>" . $item[MATHS][EXAM_2] . "</td>
<td>" . $item[ART][EXAM_1] . "</td>
<td>" . $item[ART][EXAM_2] . "</td></tr>";
"
}
$output .= "</table>";
<table border=1>
<thead>
<tr>
<th rowspan="2">Seq N0</th>
<th rowspan="2">Student Id</th>
<th colspan="2">maths</th>
<th colspan="2">art</th>
</tr>
<tr>
<td>Exam 1</td>
<td>Exam 2</td>
<td>Exam 1</td>
<td>Exam 2</td>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>1</td>
<td>82</td>
<td>90</td>
<td>60</td>
<td>82</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>82</td>
<td>90</td>
<td>60</td>
<td>82</td>
</tr>
</tbody>
</table>