MySQL данные из календаря проверить, если забронированы - PullRequest
0 голосов
/ 27 января 2010

У меня есть база данных с резервированием для предметов. Все бронирования имеют: ID, идентификатор элемента, personWhoBookedId, time_from (unixtime), time-to (unixtime).

Мне нравится отображать ежедневное расписание от часа к часу, раскрашивать время, за которое товар забронирован, и отображать personWhoBookedID на этом таймфрейме.

нравится:

room1:
5:00 - 6:00: free
6:00 - 7:00: booked by[person]
8:00 - 9:00:free

и

room 2:
5:00 - 6:00: free
6:00 - 7:00: booked by[person]
8:00 - 9:00: booked by[person]

и т.д.

В это время я перебираю существующие элементы с помощью mysql, а затем проверяю на таймфрейме с помощью mysql, есть ли резервирование, равное itemID и timeis между указанным периодом времени от и до времени до 1013 *

Это работает, но выполняет много запросов к базе данных.

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

     $allreservationsperday = mysql_query("select id, personid, itemid, time_from, time_to FROM reservations where time_from >= '$unixfrom' and time_to < '$unixto'");

 while($reservationarray = mysql_fetch_array($allreservationsperday)){
 $res[$reservationarray ["id"]]["personid"] = $reserveringenarray["personid"];
 $res[$reservationarray ["id"]]["itemid"] = $reserveringenarray["itemid"];
 $res[$reservationarray ["id"]]["time_from"] = $reserveringenarray["time_from"];
 $res[$reservationarray ["id"]]["time_to"] = $reserveringenarray["time_to"];
}

, а затем отобразить временную шкалу с помощью цикла Loop для просмотра часов дня. Но я не могу понять, как проверить в час, есть ли резервирование в только что сформированном массиве.

Любая помощь приветствуется! Йерун

Ответы [ 2 ]

0 голосов
/ 28 января 2010

@ jonaz: я не вижу, как это вписать в сценарий.В настоящее время я попробовал это (для обзора аренды лодок): предварительный просмотр сценария ниже на этом тестовом сайте

    echo "<br>Overview for today:<br><table cellpadding=0 cellspacing=0 border=1 class='navbar' id='navbar' width='100%'>";
$boten = getBootIdType("2"); //Get all boats that can be rented
foreach($boten as $boten=>$value){ //display a timeline per boat
    echo "<tr>";
    echo "<td>Boat ".$value."</td>";

    $unix_from = strtotime(date("d-m-Y 7:00")); //bookings can be made from 7am to 9pm
    $unix_to = strtotime(date("d-m-Y 21:00"));

    while ($unix_from <= $unix_to) {

     // HERE I WANT TO CHECK IF A BOOKING EXISTS IN THE ARRAY AND DISPLAY THE PERSON ID AS IDENTIFIER
     // and set a different background is there is a booking on that time

        echo "<td bgcolor='$bg'>".date("H:i", $unix_from)."</td>";
        $unix_from = $unix_from + 1800;
    }
    echo "</tr>\r\n";
}
echo "</table>";
0 голосов
/ 27 января 2010

просто перебрать их и проверить различия в следующем значении в строке?

foreach($res as $key=>$val){
    if($val['time_from'] == $res[$key+1]['time_from'])
        //this is same hour. lets do something here?
    else
        //this is a new hour. 
}

Конечно, вы должны проверить, установлен ли $ res [$ key + 1] также перед сравнением.

...