2014-05-10 30 views
0

下面的代碼回顯了一個包含兩列的HTML表格:第一列包含日期,第二列包含該日期的交易。它只顯示即將到來的90天內的日期。獲取HTML表格以包含空日期的行

某些日期沒有交易,而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

保存日期的變量。然後在處理下一行時,檢查日期是否是您保存日期之後的那一天。如果不是,則寫出所有缺失日期的行。 – Barmar

+0

我該怎麼做? – John

回答

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>'; 
+0

其實,我所要做的只是在「JOIN」前添加「LEFT」這個詞,並解決了這個問題。我喜歡這樣簡單,優雅的解決方案。 – John

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

} 

本質上說,現在最後交易日期間的每一天,連續打印。如果當天沒有交易,那將只是日期和空白欄。

相關問題