Php 检查MySQL表中是否有任何记录位于特定日期

Php 检查MySQL表中是否有任何记录位于特定日期,php,mysql,database,pdo,Php,Mysql,Database,Pdo,我在mysql中有一个在线预订系统数据库,我正在尝试使用它与一个可视化php日历链接 日历上的每一天都用表示,我使用下面的PDO查询来确定每天的背景颜色(如果可用=没有颜色,如果没有则为红色) 我遇到的一个复杂问题是,我需要直观地显示1个预订在第X天结束,并显示另一个预订在第X天开始 $query_params = array( ':campervan_id' => $_GET['campervan'], ':day' => $date_form.($i - $st

我在mysql中有一个在线预订系统数据库,我正在尝试使用它与一个可视化php日历链接

日历上的每一天都用
表示,我使用下面的PDO查询来确定每天的背景颜色(如果可用=没有颜色,如果没有则为红色)

我遇到的一个复杂问题是,我需要直观地显示1个预订在第X天结束,并显示另一个预订在第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>
";
}
如果($i<$startday){
回声“
";
}
否则{
//如果有空的话
如果(!$行){
$color=“无”;
}
//如果一天不可用
否则{
$color=“#F3747F”;
}
$dayMonth=($i-$startday+1)。“/$cMonth”;
//如果当天正好是开始提货的日期
如果($dayMonth==$rows['s_d'])){
$back=“背景图像:url(\“images/morning\u back.png\”)”;
$color=“无”;
}
//如果某一天正好是下班日期
如果($dayMonth==$rows['e_d']){
$back=“background image:url(\“images/detainum\u back.png\”)”;
$color=“无”;
}
// **************************************************
//如果同时在开始日期和结束日期????????
如果($dayMonth==($rows['s_d']&&$rows['e_d']){
$back=“背景图像:url(\“images/full\u back.png\”)”;
$color=“无”;
}
// **************************************************
否则{
$back=“”;
}
回声“
“($i-$startday+1)。”
";
}
这可以在每次预订的开始日期和结束日期直观地显示对角线分割背景图像,但我无法正确显示一次预订结束和另一次预订开始的日期


我想这是因为我最初的查询只是查看一个预订记录-我需要它来识别所有的预订记录,有人能帮忙吗???

你应该在预订bb上做一个内部连接,其中bb.enddate=bb2.stsrtdate和bb.booking\u id=bb2.预订号

LEFT JOIN booking as bb2
ON bb.enddate=bb2.startdate 
AND bb.booking_id!=bb2.booking_id
然后可以检查bb2.u id是否为空。如果不是,则有一个匹配的开始和结束日期

但这只有在同一天只有一个活动开始时才有效。否则您可能会得到重复的行