Вставьте пустую строку в таблицу, чтобы разделить время каждые 30 минут в PHP MySQL

Я показываю определенную информацию, хранящуюся в таблице MySQL в таблице HTML. Один из столбцов таблицы имеет тип «время». Моя идея состоит в том, что ряды разнесены по 30 минут. Так и должно быть:

08:00
08:15
08:25
----separator
08:35
08:55
----separator
09:00
09:15

Мне удалось что-то сделать, но это не очень хорошо работает.

Вот что я сделал:

<?$lastTime = '';?>
<?while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { ?>
<?$currentMinutes = substr($row["time"],3,2);?>
<?$lastMinutes = substr($lastTime,3,2);?>
<?if ( $lastTime <> '' and ($currentMinutes <> $lastMinutes) and ( ($lastMinutes <> '00' or $lastMinutes <> '30') and ($currentMinutes == '00' or $currentMinutes == '30' )  ) ){?>
<tr><td>Separator</td></tr>
<?}?>
<tr><td><?=$row["time"];?></td></tr>
<?$lastTime = $row["time"];?>
<?}?>

Это удобно делать, или есть ли способ решить это в запросе MySQL?

0

Решение

Если бы вы могли обновить ваш запрос, чтобы захватить интервалы с

select `time`, subtime(`time`,maketime(0,mod(minute(`time`),30),0)) as period
from table;

time        period
08:00:00    08:00:00
08:15:00    08:00:00
08:25:00    08:00:00
08:35:00    08:30:00
08:55:00    08:30:00
09:00:00    09:00:00
09:15:00    09:00:00

У вас может быть PHP-код, который выводит разделитель всякий раз, когда точка изменяется по сравнению с предыдущим значением.

$period = '';
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
if ($row['period'] != $period) {
// Output separator
}
$period = $row['period'];
}

Если вы хотите пропустить первый разделитель, то вы можете проверить, что $period != '',

2

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

Если бы я был тобой, я бы, наверное, просто добавил бы флаг, который я переворачиваю, когда пересекаю полчаса. Что-то вроде:

$previous_hour = null;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$marker = 'first_thirty';
$hour = substr($row["time"],0,2);
$minutes = substr($row["time"],3,2);

if ( $previous_hour && ( $previous_hour != $hour ) ) {
$marker = 'first_thirty'
//add searator
} else {
if ( $minutes >= 30 && $marker == 'first_thirty' ) {
$marker = 'last_thirty'
//add separator
}
}

//do normal
$previous_hour = $hour;
}
0

По вопросам рекламы [email protected]