Наконец-то у меня получилось, сославшись на этот пост
Динамический диапазон строк при извлечении записей из базы данных
и ответ от Динеш Патры.
Перед тем как опубликовать вопрос, я попробовал его код, но таблица была разбита при просмотре.
После просмотра полученного источника я заметил, что если для всех строк, в которых нет данных, есть промежуток между строками, и это вызывает разрыв таблицы.
Так что, если в моей таблице базы данных есть данные во всех строках, его код работал отлично, но мне нужно было, чтобы некоторые строки были без данных.
Я изменил его код, включив в него простую проверку, является ли значение строки пустым или нет.
Ниже полный код.
<html>
<head>
<style>
table tr td, table tr th{
border: black 1px solid;
padding: 5px;
}
</style>
</head>
<body>
<?php
define("HOST", "localhost");
define("USER", "root");
define("PASSWORD", "");
define("DATABASE", "rack");
$dbconnect = new mysqli(HOST, USER, PASSWORD, DATABASE);
$sql = "select * from test ORDER BY id DESC, name DESC";
$result = mysqli_query($dbconnect,$sql);
$arr = array();
# Intialize the array, which will
# store the fetched data.
$id = array();
$name = array();
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
# data saving and rowspan calculation #
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
# Loop over all the fetched data, and save the
# data.
while($row = mysqli_fetch_assoc($result)) {
array_push($id, $row['id']);
array_push($name, $row['name']);
if (!isset($arr[$row['name']])) {
$arr[$row['name']]['rowspan'] = 0;
}
$arr[$row['name']]['printed'] = 'no';
$arr[$row['name']]['rowspan'] += 1;
}
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# DATA PRINTING #
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
echo "<table cellspacing='0' cellpadding='0'>
<tr>
<th>id</th>
<th>name</th>
<th>id</th>
</tr>";
for($i=0; $i < sizeof($id); $i++) {
$valName = $name[$i];
echo "<tr>";
# If this row is not printed then print.
# and make the printed value to "yes", so that
# next time it will not printed.
echo "<td>".$id[$i]."</td>";
if(empty($valName)) //if name is empty, print blank td
{
echo "<td></td>";
}
else
{
if ($arr[$valName]['printed'] == 'no')
{
echo "<td rowspan='".$arr[$valName]['rowspan']."'>".$valName."</td>";
$arr[$valName]['printed'] = 'yes';
}
}
echo "<td>".$id[$i]."</td>";
echo "</tr>";
}
echo "</table>";
?>
</body>
</html>
Изображение таблицы