繁体   English   中英

SQL查询使用不同的数组数据多次显示相同的记录

[英]SQL query displaying same record multiple times with different array data

我不确定自己在做什么错,但基本上我想将一个月中的某几天通过一个数组(完成),但是trips表中预订日期范围内的日期与它们的外观不同,这是目前的样子

http://oi60.tinypic.com/2zzrc03.jpg

我试图输出这样的地方..

March 1[2 3 4 5]6[7 8 9 10]

该代码在大多数情况下都有效,但是对于具有多个事件的月份来说,它会重复月份并在其自己的月份行中显示日期

这是我的代码,是的,我知道它是mysql,但是目前这是一个本地项目,因此在进行此步骤之前,我正在努力使其正常运行。

<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);
      while ($row = mysql_fetch_array($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>

我只是想知道我的编码是否错误,或者我是否应该尝试使用其他方法来实现目标? 任何建议表示赞赏。

通过与人玩耍并与他们交谈,我开始工作了,消除了对日历表的需要,并更改了数组。

<?php 
function date_range($first, $last, $step = '+1 day', $output_format = 'Y-m-d' ) {

$dates = array();
$current = strtotime($first);
$last = strtotime($last);

while( $current <= $last ) {

    $dates[] = date($output_format, $current);
    $current = strtotime($step, $current);
}

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

$sql = "SELECT * FROM trips WHERE year(start_date) = '$cyear' ORDER BY   start_date ASC";
$res = mysql_query($sql);
$array_days = array();
while ($rows = mysql_fetch_array($res)) {
$all_dates[] = array('start'=>strtotime($rows['start_date']),'end'=>strtotime($rows['end_date']));
$selected_dates = date_range(date("Y-m-d",strtotime($rows['start_date'])), date("Y-m-d",strtotime($rows['end_date'])));
foreach($selected_dates as $selected_date){

    $array_days[$selected_date] = date("d",strtotime($selected_date));
}

}
 $current_month = date("m");
 $next_6_month = date("m", strtotime("+5 month", strtotime(date("F") .  "1")));
    for($i=$current_month;$i<=$next_6_month;$i++){  // 12 months in year

 ?>
  <tr>
  <td width="40px"><?php echo date('M', mktime(0, 0, 0, $i,10, $cyear)); ?></td>
<?php 
$days_in_month = cal_days_in_month(CAL_GREGORIAN,$i,$cyear);

foreach(range(1, $days_in_month) as $days) 
{

 if(array_key_exists(date('Y-m-d', mktime(0, 0, 0, $i,$days, $cyear)),$array_days)){
    echo "<td style='text-align:center;background-color:ccc' width='12px'>$days</td>";
}else{
    echo "<td style='text-align:center;' width='12px'>$days</td>";
}
 }

 ?>
 </tr>
<?php } ?>


 </table>

首先使用准备好的语句和mysqli,因为使用您当前的方法,您可能会被sql注入!

尝试使用SELECT DISTINCT

http://www.w3schools.com/sql/sql_distinct.asp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM