2010-01-26 4 views
0

J'ai une base de données avec des réservations pour les articles. Toutes les réservations ont un ID, un identifiant d'élément, un identifiant de personne, un délai de time (unixtime), un time-to (unixtime). J'aime afficher un horaire de jour par jour d'une heure à l'autre, et colorier l'heure à laquelle un article est réservé et afficher la personWhoBookedID sur cette période.Données mysql du contrôle du calendrier si réservé

aime:

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

et

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

etc

A cette époque, j'itérer les éléments existants avec MySQL, vérifiez par période avec MySQL s'il y a une réservation qui est égal à itemID et timeis entre la période mentionnée de time-from et time-to

Cela fonctionne mais fait beaucoup de requêtes sur la base de données.

Pour augmenter les performances, je pense que je ferais mieux de Frist obtenir toutes les réservations et les stocker dans un tableau multi dimensions, comme ceci:

 $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"]; 
} 

puis afficher la timeline par une boucle for en boucle à travers les heures de le jour Mais je ne peux pas comprendre comment vérifier par heure s'il y a une réservation dans le tableau juste formé.

Toute aide est la bienvenue! jeroen

+0

@Jeroen - deux éventuellement liés messages « système de réservation » pour vous: http://stackoverflow.com/questions/1692969/booking-system-dates-in-database/1693079#1693079 et http://stackoverflow.com/questions/1687519/searching-for-availability-with-mysql-and-php/1691282 # 1691282 –

Répondre

0

suffit de les parcourir et de vérifier les différences sur la valeur suivante dans la ligne?

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. 
} 

Bien sûr, vous devrez vérifier si $ res [$ key + 1] est également disponible avant la comparaison.

0

@jonaz: Je ne vois pas comment intégrer cela dans le script. Actuellement J'ai essayé (pour un aperçu de location de bateaux): Un aperçu du script est inférieur à this test site

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>"; 
Questions connexes