我创建了一个代码,该代码使我可以从数据库表中打印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>';
}
?>
答案 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'];
}
该变量将在每次迭代中获取当前行的值,因此在下一次迭代中,您会将当前值与上一个值进行比较。在您的情况下,您需要使用日期的子字符串,或者在查询中选择月份。
显然,您必须按照使用要分组的列的顺序对数据进行排序,以使其起作用。