Мой код просто запрашивает базу данных и выводит на таблицу HTML:
<?php
include("incl\dbcon.php");
$sql = "SELECT * FROM attendanceRecord";
$result = $db_con->query($sql);
echo "<table>
<tr>
<th>Date</th>
<th>Building Name</th>
<th>Room Name</th>
<th>Student</th>
<th>Time</th>
</tr>";
while($row_result = $result->fetch_assoc()){
echo "<tr>";
echo "<td>" . $row_result['rDate'] . "</td>";
echo "<td>" . $row_result['rBuildingName'] . "</td>";
echo "<td>" . $row_result['rRoomName'] . "</td>";
echo "<td>" . $row_result['rStudent'] . "</td>";
echo "<td>" . $row_result['rTime'] . "</td>";
echo "</tr>";
}
$db_con->close();
echo "</table>";
?>
результат выглядит так:
Date Building Name Room Name Student Time
2018-07-12 Building A 1A Sam 08:32:33
2018-07-12 Building A 1A David 08:54:21
2018-07-12 Building A 1A Dragon 08:50:10
2018-07-12 Building A 1B John 08:43:11
2018-07-12 Building A 1B Coco 08:51:39
2018-07-12 Building B 3A Mary 08:21:23
2018-07-12 Building B 3A Martin 08:46:57
2018-07-12 Building B 4B Ray 08:26:47
Как я могу не показывать или пустить повторяющиеся поля в строке и сделать таблицу ниже?
Date Building Name Room Name Student Time
2018-07-12 Building A 1A Sam 08:32:33
David 08:54:21
Dragon 08:50:10
1B John 08:43:11
Coco 08:51:39
Building B 3A Mary 08:21:23
Martin 08:46:57
4B Ray 08:26:47
Где я должен подойти? из sql-запроса (не знаю, есть ли функция для пустых или NULL дубликатов полей во время запроса) или php-массив (напечатайте NULL, если дубликат затем переместите указатель?), пожалуйста, помогите, спасибо заранее!
Предполагая, что строки всегда выходят в правильном порядке (вы можете использовать ORDER BY, чтобы убедиться в этом!), То в PHP сохраните переменную, которая содержит значение даты из предыдущей строки. Если он соответствует дате в текущей строке, не печатайте это значение в td. Если это не так, напечатайте его, так как он должен быть новым. Тот же подход для имени здания и названия комнаты, но в контексте текущей даты (и построения):
$date = "";
$buildingName = ""; //declare these outside the loop so they persist between loops
$roomName = "";
while($row_result = $result->fetch_assoc()){
echo "<tr>";
echo "<td>" . ($row_result['rDate'] == $date ? "" : $row_result['rDate']) . "</td>";
echo "<td>" .($row_result['rBuildingName'] == $buildingName $row_result['rDate'] == $date ? "" : $row_result['rBuildingName']) . "</td>";
echo "<td>" . ($row_result['rRoomName'] == $roomName && $row_result['rBuildingName'] == $buildingName && $row_result['rDate'] == $date ? "" : $row_result['rRoomName']) . "</td>";
echo "<td>" . $row_result['rStudent'] . "</td>";
echo "<td>" . $row_result['rTime'] . "</td>";
echo "</tr>";
//update the references to the specific fields
$date = $row_result['rDate'];
$buildingName = $row_result['rRoomName'];
$roomName = $row_result['rRoomName'];
}
PS Я бы никогда не попытался сделать это в SQL, поскольку он действительно специфичен для представления данных в этом конкретном контексте, а не для самих данных. Это также намного проще в PHP.
В PHP вы можете сделать что-то вроде этого
include("incl\dbcon.php");
$sql = "SELECT * FROM attendanceRecord";
$result = $db_con->query($sql);
echo "<table>
<tr>
<th>Date</th>
<th>Building Name</th>
<th>Room Name</th>
<th>Student</th>
<th>Time</th>
</tr>";
$rDate = $rBuildingName = $rRoomName = $rStudent = $rTime = [];
while($row_result = $result->fetch_assoc()){
echo "<tr>";
echo "<td>" . (!in_array( $row_result['rDate'] , $rDate) ? $row_result['rDate'] : ''). "</td>";
echo "<td>" . (!in_array( $row_result['rBuildingName'] , $rBuildingName) ? $row_result['rBuildingName'] : '') . "</td>";
echo "<td>" . (!in_array( $row_result['rRoomName'] , $rRoomName) ? $row_result['rRoomName'] : '') . "</td>";
echo "<td>" . (!in_array( $row_result['rStudent'] , $rStudent) ? $row_result['rStudent'] : '') . "</td>";
echo "<td>" . (!in_array( $row_result['rTime'] , $rTime) ? $row_result['rTime'] : '') . "</td>";
echo "</tr>";
$rDate[] = $row_result['rDate'];
$rBuildingName[] = $row_result['rBuildingName'];
$rRoomName[] = $row_result['rRoomName'];
$rStudent[] = $row_result['rStudent'];
$rTime[] = $row_result['rTime'];
}
$db_con->close();
echo "</table>";