Я ищу некоторую помощь в том, как лучше структурировать запрос MySQL и отображать результаты. Я пытаюсь создать таблицу на странице PHP, которая имеет 7 дат в верхней части и номера комнаты сбоку. В таблице, если человек находится в комнате на указанную дату, появляется их имя. У меня есть следующие таблицы:Структурирование MySQL-запроса эффективно
Таблица: номера
Поля: идентификатор, номер
Таблица: заказы
Поля: идентификатор, имя, номер, к регистрационным, Кассовые
Код, который у меня есть сейчас:
<? $start = date('Y-m-d');
$end = date('Y-m-d', strtotime($start." + 6 day")); ?>
<table class="table1">
<thead>
<tr>
<th></th>
<th scope="col"><?= date('d-m', strtotime($start)); ?></th>
<th scope="col"><?= date('d-m', strtotime($start." + 1 day")); ?></th>
<th scope="col"><?= date('d-m', strtotime($start." + 2 day")); ?></th>
<th scope="col"><?= date('d-m', strtotime($start." + 3 day")); ?></th>
<th scope="col"><?= date('d-m', strtotime($start." + 4 day")); ?></th>
<th scope="col"><?= date('d-m', strtotime($start." + 5 day")); ?></th>
<th scope="col"><?= date('d-m', strtotime($start." + 6 day")); ?></th>
</tr>
</thead>
<tbody>
<? $q1 = mysqli_query($con,"SELECT * FROM rooms GROUP BY room");
while($row1 = mysqli_fetch_assoc($q1)){ ?>
<tr>
<th><?= $row1['room']; ?></th>
<? $i = 0;
while ($i <= 6) { ?>
<td>
<? $q2 = mysqli_query($con,"SELECT * FROM bookings WHERE ((checkin BETWEEN '$start' and '$end') or (checkout BETWEEN '$start' and '$end') or (checkin <= '$start' AND checkout >= '$end')) and room = '$row1[room]'");
while($row2 = mysqli_fetch_assoc($q2)){
if ($row2['checkout'] > date('Y-m-d', strtotime($start." + ".$i." day")) and $row2['checkin'] <= date('Y-m-d', strtotime($start." + ".$i." day"))) {
echo $row2['name'];
}
} ?>
</td>
<? ++$i;
} ?>
</tr>
<? } ?>
</tbody>
</table>
Этот код в настоящее время дает результат, который мне нужен, однако я обеспокоен тем, что он неэффективен из-за количества циклов и запросов, которые он запускает для получения данных.
Может ли кто-нибудь предложить лучший способ форматирования запроса/результата?
Начать с изучения SQL JOINS –
Возможно, у вас есть запрос Google для mysql –
Помните, что время является линейным, поэтому вас интересует только время, когда x_start является y_start! –
Strawberry