在 table 中插入空行以在 PHP MySQL 中每 30 分钟分隔一次

Insert empty row in table to separate times each 30 minutes in PHP MySQL

我正在 MySQL table 中显示某些存储在 HTML table 中的信息。 table 的其中一列的类型为 "time"。我的想法是每行间隔 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查询中有什么办法可以解决吗?

如果我是你,我可能只会添加一个标志,当我超过半小时标记时我会翻转它。类似于:

$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;
}

如果您可以使用

更新您的查询以捕获间隔
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 != ''