2013-03-12 25 views
0

我有一个在线mysql预订系统数据库,我试图用this tutorial链接到一个可视php日历。检查MySQL表中的任何记录是否存在于特定日期

每天在日历上由<td>表示,我使用以下PDO查询来确定每天的背景颜色(如果可用=无颜色,如果不是红色)。

的一个并发症,我已经是,我需要在视觉上显示1个预订结束一天X,并显示另一个预订开始在同一天十

$query_params = array( 
    ':campervan_id' => $_GET['campervan'], 
    ':day' => $date_form.($i - $startday + 1) 
); 

$query = " 
    SELECT 
     car, 
     booking_id, 
     DATE_FORMAT(start_date, '%e/%c') AS s_d, 
     DATE_FORMAT(end_date, '%e/%c') AS e_d 
    FROM 
     bookings as bb 
    INNER JOIN 
     reservation as br ON bb.booking_id=br.bookings_id 
    INNER JOIN 
     cars as bc ON br.car_id=bc.car_id 
    WHERE 
     bc.campervan_id=:campervan_id AND 
     :day BETWEEN bb.start_date AND bb.end_date 
"; 

与当时我使用下列到输出表格单元格的结果:

if($i < $startday) { 
    echo " 
     <td> 
     </td> 
    "; 
} 

else { 

// IF DAY IS AVAILABLE 
if(!$rows) { 
    $color = "none"; 
} 
// IF DAY IS UNAVAILABLE 
else { 
    $color = "#F3747F"; 
} 

$dayMonth = ($i-$startday + 1)."/$cMonth"; 


// If DAY FALLS ON A START PICK UP DATE 
if ($dayMonth == $rows['s_d']) { 
     $back = "background-image:url(\"images/morning_back.png\");"; 
     $color = "none"; 
} 
// If DAY FALLS ON A END DROP OFF DATE 
else if($dayMonth == $rows['e_d']) { 
     $back = "background-image:url(\"images/afternoon_back.png\");"; 
     $color = "none"; 
} 

// ************************************************** 

// IF FALLS ON BOTH A START AND END DATE???????? 
else if($dayMonth == ($rows['s_d'] && $rows['e_d'])) { 
     $back = "background-image:url(\"images/full_back.png\");"; 
     $color = "none"; 
} 

// ************************************************** 

else { 
    $back = ""; 
} 

echo " 
    <td align='center' valign='middle' height='100px' width='134' style='color:#FFFFFF; background-color:".$color."; ".$back." border:1px solid white;'> 
     ".($i-$startday + 1)." 
    </td> 
"; 
} 

这适用于视觉显示上的每个预订,对于每一个结束日期的开始日期对角线分割的背景图像,但我不能让天那里既是一个结束预订和另一个的开始显示正确。

我认为这是因为我最初的查询只查看一个预订记录 - 我需要它来识别所有这些记录,任何人都可以帮忙吗?

回答

0

你应该做一个内部联接上预订BB本身,其中bb.enddate = bb2.stsrtdate和bb.booking_id!= bb2.booking_id

LEFT JOIN booking as bb2 
ON bb.enddate=bb2.startdate 
AND bb.booking_id!=bb2.booking_id 

然后,您可以检查是否bb2.booking_id为null。如果不是,则有匹配的开始和结束日期。

但是,只有当在同一天开始只有1个事件时才能使用。否则你可能会得到重复的行。

+0

这是我需要的,谢谢! – 2013-03-13 11:03:28

相关问题