2015-03-25 2 views
0

Я не уверен, что я делаю неправильно, но в основном я пытаюсь выставить дни месяца через массив (сделанный), но эти даты, которые находятся внутри диапазон дат бронирования от моего trips таблицы имеют различный внешний вид на них, это то, как она в настоящее время выглядитSQL-запрос, отображающий одну и ту же запись несколько раз с различными данными массива

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

Где я пытаюсь вывести, как это ..

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

код работает в большинстве случаев, но в течение нескольких месяцев, которые имеют несколько событий, они повторяют mon го и показывая дни в их собственном месячном ряду

Вот мой код, да, я знаю, что он является 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> 

Я просто интересно, если мое кодирование является неправильным или если я должен пытаться достичь своих целей с альтернативным методом? любые предложения оценены.

ответ

0

Прежде всего, используйте подготовленные операторы и mysqli, потому что с помощью вашего текущего метода вы можете ввести sql!

Попробуйте использовать SELECT DISTINCT

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

+0

благодарит за ваш ответ, сейчас я прочитаю сейчас, я просто использую sql при автономном построении, планируем выучить разговор и делать это до того, как какой-либо сайт начнет жить. – JCain

1

Через играя и общаясь с людьми, которые я получил это работает, я удалил необходимость таблицы календаря и изменил массив.

<?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> 
Смежные вопросы