HTML / PHP按颜色分组的月度表

时间:2019-07-01 23:00:24

标签: php html sql

我创建了一个代码,该代码使我可以从数据库表中打印HTML表行,然后按日期对它们进行排序。

日期存储为VARCHAR的问题(我不是启动此项目的人,并且数据库已经处于活动状态,并且已通过php Web应用程序使用),这就是为什么我使用“ str_to_date”来打开日期将其转换为实际的日期数据类型并能够对其进行排序,此处使用的格式为dd / mm / yyyy。

我需要帮助的是按月分组,保持排序,但是具有相同月份的行具有相同的颜色或与其他行分开。

我检查了现有论坛,但没有任何答案。

<?php
$est_query = "SELECT * FROM t1_estimaciones WHERE EstComentario = 'PENDIENTE PAGO' ORDER BY str_to_date(EstFechaPago,'%d/%m/%Y') ASC;";

$est_result = mysqli_query($link, $est_query);
while($est_row = mysqli_fetch_array($est_result)){
    $est_idtabla1 = $est_row['idTabla1'];
    $est_subtotal = $est_row['EstSubtotal'];
    $est_iva = $est_row['EstIVA'];
    $est_importe = $est_row['EstImporte'];
    $est_fecha_ingreso = $est_row['EstFechaIngreso'];
    $est_fecha_pago = $est_row['EstFechaPago'];
    $est_num_factura = $est_row['EstNumFactura'];
    $est_comentario = $est_row['EstComentario'];

    $est_po_query = "SELECT * FROM Tabla_1 WHERE Num = '$est_idtabla1'";
    $est_po_result = mysqli_query($link,$est_po_query);
    $est_po_row = mysqli_fetch_array($est_po_result);
    $est_po = $est_po_row['PO'];

    echo '<tr style="border-bottom:thin solid #949494;height:60px;">';
    echo '<td style="width:10%;text-align:center;color:whitesmoke;">' . $est_po . '</td>';
    echo '<td style="width:10%;text-align:center;border-left:thin solid #949494;color:whitesmoke;">$' . number_format($est_subtotal) . '</td>';
    echo '<td style="width:10%;text-align:center;border-left:thin solid #949494;color:whitesmoke;">$' . number_format($est_iva) . '</td>';
    echo '<td style="width:10%;text-align:center;border-left:thin solid #949494;color:whitesmoke;">$' . number_format($est_importe) . '</td>';
    echo '<td style="width:15%;text-align:center;border-left:thin solid #949494;color:whitesmoke;">' . $est_fecha_ingreso . '</td>';
    echo '<td style="width:15%;text-align:center;border-left:thin solid #949494;color:whitesmoke;">' . $est_fecha_pago . '</td>';
    echo '<td style="width:10%;text-align:center;border-left:thin solid #949494;color:whitesmoke;">' . $est_num_factura . '</td>';
    echo '<td style="width:20%;text-align:center;border-left:thin solid #949494;color:whitesmoke;">' . $est_comentario . '</td>';
    echo '</tr>';
}

?>

1 个答案:

答案 0 :(得分:0)

这是解决此类问题的一种方法。这是一个非常简化的示例,应显示该概念。

初始化一个变量,该变量将保存要用于定义组的列的值。

$group_column = null;

然后,在获取行时,将每一行中该列的值与变量进行比较。如果不同,则开始一个新组。

while ($row == $query->fetch()) {
    if ($row['group_column'] !== $group_column) {
        // this row is different than the last one
        // so start a new group
    }
    // output the row

    // the "current" value becomes the "previous" value for the next iteration
    $group_column = $row['group_column'];
}

该变量将在每次迭代中获取当前行的值,因此在下一次迭代中,您会将当前值与上一个值进行比较。在您的情况下,您需要使用日期的子字符串,或者在查询中选择月份。

显然,您必须按照使用要分组的列的顺序对数据进行排序,以使其起作用。