mysql — SQL PHP: как выбрать и получить, как это?

Здравствуйте, я знаю, как использовать базовый 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

Это не я хочу.

2

Решение

К счастью, вы используете 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";
}
}
2

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector