Я показываю определенную информацию, хранящуюся в таблице 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?
Если бы вы могли обновить ваш запрос, чтобы захватить интервалы с
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 != ''
,
Если бы я был тобой, я бы, наверное, просто добавил бы флаг, который я переворачиваю, когда пересекаю полчаса. Что-то вроде:
$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;
}