Я пытаюсь динамически генерировать многоуровневую таблицу заголовков. К сожалению, после долгих испытаний я понял, что не могу сделать это в одиночку.
Я пытаюсь объединить ячейки заголовка в одну ячейку, как на экране:
Вот мой рабочий PHP-код. Единственное, что нужно сделать, это заголовок trier 1
PHP-код:
<html>
<head>
<meta charset="UTF-8">
</head>
<body><!--
/**************
* CSS styles *
**************/
-->
<style type="text/css">
h1 {font-family:Segoe UI;font-size:18px;}
h2 {font-family:Segoe UI;font-size:14px;font-weight:normal;}
table {border-collapse:collapse;border-spacing:0;border-color:#ccc;}
th {font-family:Segoe UI;font-size:13px;font-weight:bold;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#f0f0f0;}
td {font-family:Segoe UI;font-size:13px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#ccc;color:#333;background-color:#fff;}
</style><!--
/**********************
* connection details *
**********************/
-->
<?php
$host = "127.0.0.1";
$user = "dnlw";
$pass = "";
$database = "ksiegarnia";
$port = 3306;
$connect = mysql_connect($host, $user, $pass, $port);
if (!$connect)
{
die("Can't connect to database");
}
if (!mysql_select_db($database))
{
die("Can't select database");
}/*****************
* sending query *
*****************/
$query = file_get_contents("query.txt");
mysql_query("SET NAMES 'utf8'");
$result = mysql_query($query);
$row_num = mysql_num_rows($result);
$fields_num = mysql_num_fields($result);
if (!$result)
{
die("Query to show fields from table failed");
}/**********************
* printing the table *
**********************/echo "<title>Query result</title>
<h2>znaleziono: <b>{$row_num}</b></h2><table>
<thead>
<tr>";
// ?????????????????????????????????????????????
for($i=0; $i<$fields_num; $i++)
{
$header = mysql_fetch_field($result);
echo "<th>{$header->table}</th>";
}
echo "</tr>
<tr>";
// printing table headers
for($i=0; $i<$fields_num; $i++)
{
$header2 = mysql_fetch_field($result);
echo "<th>{$header->name}</th>";
}
echo "</tr>
</thead>
<tbody>
<tr>";
// printing table rows
while($row = mysql_fetch_row($result))
{
echo "<tr>";
// $row is array... foreach( .. ) puts every element
// of $row to $cell variable
foreach($row as $cell)
echo "<td>$cell</td>";
echo "</tr>\n";
}
mysql_free_result($result);
echo"</tr>
</tbody>
</table>";
?>
</body>
</html>
Ссылка на базу данных:
https://1drv.ms/u/s!AvpVESbXIIvxhrByuEodnjt5JTdgLA
Я думаю, что сначала я просто создам ассоциативный массив всех имен ваших таблиц, каждое из которых содержит количество столбцов, которые они охватывают, а затем использую его для первого уровня заголовка:
$table_names = array();
for($i=0; $i<$fields_num; $i++) { // count the number of times each $header->table occurs:
$header = mysql_fetch_field($result);
if(!isset($table_names[$header->table])) $table_names[$header->table] = 1;
else $table_names[$header->table]++;
}
// at this point, you get something like $table_names = [klienci=>4, zamowienia=>5, ksiazki=>5]
А затем вывести ваш первый уровень заголовков:
foreach($table_names as $table_name => $nb_of_occurences) {
echo '<th colspan="'.$nb_of_occurences.'">'.$table_name.'</th>';
}
Надеюсь это поможет!
Других решений пока нет …