下面的代码回显出一个包含两列的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_*
-它已贬值,而是使用mysqli
或pdo
。我就不多说了,因为这不是这个问题的问题,但你应该看看其他选项。话虽如此,不妨试试这个方法来解决您当前的问题:
$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"> </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'));
}
基本上,从现在到最后一笔交易的日期之间的每一天,打印一行。如果当天没有达成协议,则只剩下日期和空列。