下面的代码回显了一个包含两列的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>";
答案 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_*
- 它已被折旧,而是使用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'));
}
基本上,从现在到最后一笔交易日期之间的每一天,都会打印一行。如果当天没有交易,那就是日期和空栏。