mysql — создание таблицы с проверкой PHP с использованием значения перед и текущим значением (массив)

Это моя таблица данных1. Я хочу, чтобы эта таблица изменилась на table2. Я должен использовать PHP для этого. Я написал некоторый код, используя foreach, но он не работает должным образом. С

Таблица 1

|-------+------------+--------------+---------+--------|
|Seq No | Student Id | Subject Name |  Exams  | Marks  |
|-------+------------+--------------+---------+--------|
|  1    | 200301     |   maths      |  Exam 1 |  25    |
|  2    | 200301     |   maths      |  Exam 2 |  45    |
|  3    | 200301     |   art        |  Exam 1 |  76    |
|  4    | 200301     |   art        |  Exam 2 |  42    |
|  5    | 200302     |   maths      |  Exam 1 |  71    |
|  6    | 200302     |   maths      |  Exam 2 |  78    |
|  7    | 200302     |   art        |  Exam 1 |  35    |
|  8    | 200302     |   art        |  Exam 2 |  61    |
|-------+------------+--------------+---------+--------|

Я хочу создать как table2 используя PHP.

Таблица 2

|-------+------------+-----------------+-----------------+
|       |            |     maths       |      art        |
|Seq No | Student Id |-----------------|-----------------|
|       |            | Exam 1 | Exam 2 | Exam 1 | Exam 2 |
|-------+------------+-----------------+-----------------+
|  1    | 200301     |   25   |   45   |  76    |  42    |
|  2    | 200302     |   71   |   78   |  35    |  61    |
|-------+------------+--------+--------+--------+--------|

** Я написал что-то вроде этого. но это не работает должным образом. **

$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>";

это мой массив

Array([1] => Array([STUDENT_ID] => 200301
[SUBJECT_NAME] => maths
[ASSIGNMENT_TITLE] => exam_1
[MARKS] => 25 )
[2] => Array([STUDENT_ID] => 200301
[SUBJECT_NAME] => maths
[ASSIGNMENT_TITLE] => exam_2
[MARKS] => 45 )
[3] => Array([STUDENT_ID] => 200301
[SUBJECT_NAME] => art
[ASSIGNMENT_TITLE] => exam_1
[MARKS] => 76 )
[4] => Array([STUDENT_ID] => 200301
[SUBJECT_NAME] => art
[ASSIGNMENT_TITLE] => exam_2
[MARKS] => 42 )
[5] => Array([STUDENT_ID] => 200302
[SUBJECT_NAME] => maths
[ASSIGNMENT_TITLE] => exam_1
[MARKS] => 71 )
[6] => Array([STUDENT_ID] => 200302
[SUBJECT_NAME] => maths
[ASSIGNMENT_TITLE] => exam_2
[MARKS] => 78 )
[7] => Array([STUDENT_ID] => 200302
[SUBJECT_NAME] => art
[ASSIGNMENT_TITLE] => exam_1
[MARKS] => 35 )
[8] => Array([STUDENT_ID] => 200302
[SUBJECT_NAME] => art
[ASSIGNMENT_TITLE] => exam_2
[MARKS] => 61 )
)

Это мой массив данных. Я должен создать как table2 используя этот массив. любой может мне помочь.

-2

Решение

Если я правильно понимаю, вы хотите, чтобы таблица 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>

Хочу увидеть jsFiddle Вот

Вы не опубликовали свой SQL, вам не нужно использовать forwach вы можете while сделайте это, как показано ниже.

<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>
<?PHP while($row = $stmt -> fetch(PDO::FETCH_ASSOC){ ?>
<tr>
<td>$row["seqNo"]</td>
<td>$row["studen_id"]</td>
<td>$row["Exam1"]</td>
<td>$row["Exam2"]</td>
<td>$row["Exam1"]</td>
<td>$row["Exam2"]</td>
</tr>
<?php } ?>
</table>

Имейте в виду, что это без вашего SQL, так что отрегулируйте его в соответствии с вашими потребностями и в PDO,

0

Другие решения

Это будет дизайн вашего стола 🙁https://jsfiddle.net/vg3whzvq/2/)

<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>
<tr>
<td>1</td>
<td>200301</td>
<td>51</td>
<td>25</td>
<td>64</td>
<td>45</td>
</tr>
</table>

Теперь для отображения данных с помощью 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 похоже.

0

Вы можете получить результат, используя sql с помощью функции 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
0

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>";
0

Попробуйте это, как только я не проверил вывод, я предполагаю массив как следовать

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>";
0

Мне кажется, что используемая вами структура таблицы неверна.

Вот правильная структура таблицы, которую вы ищете.

<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>
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector