获取HTML表以包含空日期的行

时间:2014-05-10 01:49:40

标签: php mysql

下面的代码回显了一个包含两列的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>";    

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

首先,您不应该使用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'));

}

基本上,从现在到最后一笔交易日期之间的每一天,都会打印一行。如果当天没有交易,那就是日期和空栏。