如何像这样显示表格行

i have this table in mysql

enter image description here

this is mycode //generate report

<center>
<table border=1 cellpadding=10>
    <tr>
        <td rowspan="2">TANGGAL</td>
        <td colspan="2" align="center">PAGI</td>
        <td colspan="2" align="center">SORE</td>
        <td rowspan="2">JML. JAM</td>
        <td rowspan="2">JML. Rp</td>
    </tr>
    <tr>
        <td>Masuk</td>
        <td>Keluar</td>
        <td>Masuk</td>
        <td>Keluar</td>
    </tr>
    <?php   
    $qry_tgl=mysql_query("SELECT id_peg, date(waktu) Tgl from absen where id_peg=1 group by Tgl");
    while($row=mysql_fetch_array($qry_tgl)){    
        echo "<tr>";
            echo "<td>".$row['Tgl']."</td>";
        echo "</tr>";
    }           
    echo "</table></center>";   

I want to display table in php like this enter image description here

Please help me, I'm very confuse what to do

thankyou

Your HTML code seems to be fine, but SQL query not. I assume you were asking about how to make a correct query. When using GROUP BY you should (and in newer MySQL versions by default must) select only fields with either aggregate functions like SUM, AVG, etc., or select fields that are specified in GROUP BY. You cannot group by result of a select.

Your query should be like this:

SELECT DATE(waktu) Tgl FROM absen WHERE id_peg=1 GROUP BY DATE(waktu)

EDIT: Ok, according to google translate and other sites Masuk/Keluar are Since/Till. And using new provided information this should do the trick:

<center>
<table border=1 cellpadding=10>
<tr>
    <td rowspan="2">TANGGAL</td>
    <td colspan="2" align="center">PAGI</td>
    <td colspan="2" align="center">SORE</td>
    <td rowspan="2">JML. JAM</td>
    <td rowspan="2">JML. Rp</td>
</tr>
<tr>
    <td>Masuk</td>
    <td>Keluar</td>
    <td>Masuk</td>
    <td>Keluar</td>
</tr>
<?php
function display_row($timeRanges) {
    $pagi = isset($timeRanges[1]) ? strtotime($timeRanges[1]) - strtotime($timeRanges[0]) : 0;
    $sore = isset($timeRanges[3]) ? strtotime($timeRanges[3]) - strtotime($timeRanges[2]) : 0;
    $seconds = $pagi + $sore;

    echo "<tr>";
    echo "<td>" . substr($timeRanges[0], 0, 10) . "</td>"; // TANGGAL
    echo "<td>" . substr($timeRanges[0], 11, 8) . "</td>"; // PAGI Masuk
    echo "<td>" . (isset($timeRanges[1]) ? substr($timeRanges[1], 11, 8) : "") . "</td>"; // PAGI Keluar
    echo "<td>" . (isset($timeRanges[2]) ? substr($timeRanges[2], 11, 8) : "") . "</td>"; // SORE Masuk
    echo "<td>" . (isset($timeRanges[3]) ? substr($timeRanges[3], 11, 8) : "") . "</td>"; // SORE Keluar
    echo "<td>" . round($seconds / 3600, 2) . "</td>"; // JML. JAM shows rounded number of hours
    echo "<td>" . round($seconds * 5000 / 3600) . "</td>"; // JML. Rp number hours * 5000
    echo "</tr>";
}

$qry_tgl=mysql_query("SELECT DATE(waktu) Tgl, waktu FROM absen WHERE id_peg=1 ORDER BY waktu");
$lastDate = null;
$timeRanges = array();
while($row=mysql_fetch_array($qry_tgl)){
    if( $row['Tgl'] !== $lastDate ) {
        if( $lastDate !== null )
            display_row($timeRanges); // renders the row when the date changes, but only if we fetched at least one date
        $lastDate = $row['Tgl'];
        $timeRanges = array();
    }
    $timeRanges[] = $row["waktu"];
}
if( $lastDate !== null )
    display_row($timeRanges); // renders the last row when the loop ends, but also only if we fetched at least one date
echo "</table></center>";

This algorithm reads dates into $timeRanges array until another date is encountered. So when display_row() function is called the $timeRanges will contain only ordered records for the same date.

I'm afraid doing it using only MySQL would be slow and a huge waste of resources.