SQL Query仅显示第一个结果而不是阵列数据

时间:2015-03-25 11:46:25

标签: php mysql

基本上我正在构建一个日历页面,显示月份和月份的日期(从我的数据库中提取),然后是" start_date - end_date"中的任何日期。变量以不同的单元格背景颜色显示给没有分配开始日期或结束日期的日期,我让它工作到一定程度,但它只显示每个月最早的记录而不是全部结果。

    2015-03-12(start) - 2015-03-16(end)
    2015-03-03(start) - 2015-03-10(end)

而不是像这样展示......

`1 2 [3 4 5 6 7 8 9 10] 11 [12 13 14 15 16] 17 18 19 20 ...` 

它只显示[3 - 10]记录,这是我当前的代码..

<table width="100%" cellspacing="0">
 <?php
 $cmonth = date('F'); 
 $cyear = date('Y');

 $sql = "SELECT * FROM calendar WHERE year = '$cyear' ORDER BY m_order ASC";
$res = mysql_query($sql);
while ($rows = mysql_fetch_array($res)) {
$month_end = $rows['days_in_month'];
$month_name = $rows['month_name'];
$m_order = $rows['m_order'];

 $sql2 = "SELECT * FROM trips WHERE start_date LIKE '____-0$m_order-__'      ORDER BY start_date ASC";
 $res2 = mysql_query($sql2);
 $row = mysql_fetch_assoc($res2);

 $stdate = $row['start_date'];
 $s = date_parse_from_format("Y-m-d", $stdate);

 $endate = $row['end_date'];
 $e = date_parse_from_format("Y-m-d", $endate);

 $start = $s['day'];
 $end = $e['day'];

 ?>
 <tr>
 <td width="80px"><?php echo $month_name; ?></td>
 <?php

 foreach(range(1, $month_end) as $days) 
 {
 if(in_array($days, range($start, $end)))
 {
 echo "<td style=\"background-color: #ccc;\" align=\"center\">" . $days .    "    </td>";
 }
 else
 echo "<td align=\"center\">" . $days . "</td>";
 }
 ?>
 </tr>

 <?php } ?>
 </table>

另外我知道没有使用mysqli的危险,但我只是在我的本地机器上学习这个并计划在我的功能正常工作后研究更新的策略,所以我知道我的功能是否坏了还是我的编码是。

由于

2 个答案:

答案 0 :(得分:0)

您只从trips表格中获取结果集的一行。你需要这样的东西来得到第二个。

while ( $row = mysql_fetch_assoc($res2) ) {
    /* process each row */
}

您正在为您的其他结果集执行此操作。看一下这里的示例:http://php.net/manual/en/function.mysql-fetch-assoc.php

您需要遍历结果集行并累积“热”天,然后只渲染一天。像这样:

$sql2 = "SELECT * FROM trips WHERE start_date LIKE '____-0$m_order-__'      ORDER BY start_date ASC";
 $res2 = mysql_query($sql2);
 while ($row = mysql_fetch_assoc($res2)) {
    $stdate = $row['start_date'];
    $s = date_parse_from_format("Y-m-d", $stdate);

    $endate = $row['end_date'];
    $e = date_parse_from_format("Y-m-d", $endate);

    $start = $s['day'];
    $end = $e['day'];
    $hot_days = array();
    foreach(range(1, $month_end) as $days)  {
        $hot_days[$days] = 0;
        if(in_array($days, range($start, $end))) {
            $hot_days[$days] ++;
        }
    }
}
/* now you have a $hot_days array with nonzero values for interesting days */
?>
<tr>
  <td width="80px"><?php echo $month_name; ?></td>
   <?php
      foreach(range(1, $month_end) as $day)  {
          if($hot_days[$day] > 0) {
              echo "<td style=\"background-color: #ccc;\" align=\"center\">" . $days .    "    </td>";
          } 
          else {
              echo "<td align=\"center\">" . $days . "</td>";
          }
      }
     ?>
     </tr>

尊敬的是,我没时间调试这个。

答案 1 :(得分:0)

尝试使用常用功能从表格中读取数据        

 function db_set_recordset($sql) {
        $qry = mysql_query($sql);
        $row= array();
        while($out = mysql_fetch_assoc($qry)) {

                $row[] = $out;

        }
        return $row;
} 
 $cmonth = date('F'); 
 $cyear = date('Y');

 $sql = "SELECT * FROM calendar WHERE year = '$cyear' ORDER BY m_order ASC";
$res = mysql_query($sql);
while ($rows = mysql_fetch_array($res)) {
$month_end = $rows['days_in_month'];
$month_name = $rows['month_name'];
$m_order = $rows['m_order'];

 $sql2 = "SELECT * FROM trips WHERE start_date LIKE '____-0$m_order-__'      ORDER BY start_date ASC";
 $res2 = mysql_query($sql2);
 $row = db_set_recordset($res2);

 $stdate = $row['start_date'];
 $s = date_parse_from_format("Y-m-d", $stdate);

 $endate = $row['end_date'];
 $e = date_parse_from_format("Y-m-d", $endate);

 $start = $s['day'];
 $end = $e['day'];

 ?>
 <tr>
 <td width="80px"><?php echo $month_name; ?></td>
 <?php

 foreach(range(1, $month_end) as $days) 
 {
 if(in_array($days, range($start, $end)))
 {
 echo "<td style=\"background-color: #ccc;\" align=\"center\">" . $days .    "    </td>";
 }
 else
 echo "<td align=\"center\">" . $days . "</td>";
 }
 ?>
 </tr>

 <?php } ?>
 </table>