使HTML表包含空日期行


Getting an HTML table to include rows for empty dates

下面的代码回显出一个包含两列的HTML表:第一列是日期,第二列是为该日期安排的交易。它只显示未来90天内的日期。

有些日期没有交易,HTML表格省略了这些日期。我怎么把他们包括进去?我希望"交易"一栏只是空白的计划外日期。

   $sqlStr = "SELECT c.date, d.deal, d.datescheduled
                 FROM calendar_table c
                 JOIN deals d ON d.datescheduled = c.dt
                WHERE c.dt > NOW() 
             ORDER BY c.dt ASC
             LIMIT 90"; 
    $arr = array(); 
    echo "<table class='"samplesrec'">";
    while ($row = mysql_fetch_array($result)) { 

        echo '<tr style="border-left:0px solid #C9C9C9; border-right:0px solid #C9C9C9; border-top:0px solid #C9C9C9;" class="class3a">';

            echo '<td class="sitename1"><a href="http://www.domain.com/login/deal.php?dealid='.urlencode($row["dealid"]).'">'.$row["date"].'</a>  </td>';
            echo '<td class="sitename1"><a href="http://www.domain.com/login/deal.php?dealid='.urlencode($row["dealid"]).'">'.$row["deal"].'</a>  </td>';

        }

    echo '</tr>';


echo "</table>";    

您需要更改查询以执行左连接而不是内部连接:

$sqlStr = "SELECT c.date, d.deal, d.datescheduled
             FROM calendar_table c
             LEFT JOIN deals d ON d.datescheduled = c.dt
            WHERE c.dt > NOW() 
         ORDER BY c.dt ASC
         LIMIT 90";

这使得MySQL获取calendar_table中的所有行,而不管是否存在匹配的行。
然后,检查数组中是否为空,并写一个空单元格:

if ($row["deal"]==null)
    echo '<td></td>';
else
    echo '<td class="sitename1"><a href="http://www.domain.com/login/deal.php?dealid='.urlencode($row["dealid"]).'">'.$row["deal"].'</a>  </td>';

首先,您不应该使用mysql_* -它已贬值,而是使用mysqlipdo。我就不多说了,因为这不是这个问题的问题,但你应该看看其他选项。话虽如此,不妨试试这个方法来解决您当前的问题:

$cur_date = date('Y-m-d');
while ($row = mysql_fetch_array($result)) { // mysql_* is depreciated! Use mysqli or PDO!!!
    // While this row's date is greater than $cur_date, print empty rows
    while (strtotime($row['date']) > strtotime($cur_date)) {
        echo '<tr style="border-left:0px solid #C9C9C9; border-right:0px solid #C9C9C9; border-top:0px solid #C9C9C9;" class="class3a">';
            echo '<td class="sitename1">'.$cur_date.'</td>';
            echo '<td class="sitename1">&nbsp;</td>';
        echo '</tr>';
        // $cur_day is incremented 1 day each time until it matches this row's date
        $cur_date = date('Y-m-d', strtotime($cur_date . '+ 1 day'));
    }
    echo '<tr style="border-left:0px solid #C9C9C9; border-right:0px solid #C9C9C9; border-top:0px solid #C9C9C9;" class="class3a">';
        echo '<td class="sitename1"><a href="http://www.domain.com/login/deal.php?dealid='.urlencode($row["dealid"]).'">'.$date.'</a>  </td>';
        echo '<td class="sitename1"><a href="http://www.domain.com/login/deal.php?dealid='.urlencode($row["dealid"]).'">'.$row["deal"].'</a>  </td>';
    echo '</tr>';
    // $cur_day is incremented 1 day
    $cur_date = date('Y-m-d', strtotime($row['date'] . '+ 1 day'));
}

基本上,从现在到最后一笔交易的日期之间的每一天,打印一行。如果当天没有达成协议,则只剩下日期和空列。