Здравствуйте, я знаю, как использовать базовый SQL о select, join, fetch
но не представляю, как это сделать на моем сайте (см. скриншот)
На скриншоте также есть столбец room_number.
<table>
<tr>
<td>room no.</td>
<td>room name</td>
</tr>
<?php
$sql = SELECT * FROM si_room;
$query = $db->query($sql);
while($row = $query->fetch(PDO::FETCH_ASSOC))
{ ?>
<tr>
<td><?php echo ????? ; ?></td>
<td><?php echo ?????; ?></td>
</tr>
<?php } ?>
</table>
ОБНОВИТЬ :
Я пытаюсь с этим кодом
<?php
$sql = "SELECT * FROM si_room";
$querymain = $db->query($sql)->fetchAll(PDO::FETCH_GROUP);
?>
<table>
<tr>
<td>room no.</td>
<td>room_name</td>
</tr>
<?php
foreach ($querymain as $list_id => $list_data)
{
echo "<tr>";
echo "<td> floor ".$list_data[0]['room_floor']."<br>";
foreach ($list_data as $row)
{
echo $row['room_no']."</td>";
echo "<td>".$row['room_name']."</td>";
}
} ?>
</tr>
</table>
но результат
2 этаж
201 | КОМНАТА А
2 этаж
202 | КОМНАТА Б
3 этаж
301 | КОМНАТА Е
3 этаж
302 | КОМНАТА F
Это не я хочу.
К счастью, вы используете PDO, у которого уже есть эта функциональность, которая может делать именно то, что вы хотите — группировать данные на основе некоторого столбца.
PDO может группировать результаты во вложенные массивы, на основе первого выбранного поля. Таким образом, вам нужно перечислить свой идентификатор списка в качестве первого поля в списке полей, а затем получить строки с помощью fetchAll()
с вышеупомянутым режимом выборки:
$sql = "select room_floor, room_name, room_no from si_room";
$building = $dbh->query($sql)->fetchAll(PDO::FETCH_GROUP);
и теперь вы получаете аккуратный вложенный массив, где ваши строки сгруппированы по списку ID!
Чтобы сделать вывод аккуратно, вы должны использовать два вложенных оператора foreach
foreach ($building as $floor_no => $rooms)
{
echo $floor_no."\n";
foreach ($rooms as $row)
{
echo $row['room_name']."\n";
}
}
Других решений пока нет …