begin process at 2010 03 18 09:22:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Requête sql de disponibilités


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Requête sql de disponibilités

mercredi 5 juillet 2006 à 14:53:23 | Requête sql de disponibilités

f6xara

Voilà, pour une centrale de réservations, j'enregistre les disponibilités de chaque chambres pour chaque hotels pour chaque jours de l'année.

Lors de la recherche de disponibilité, je me retrouve donc avec une base de données de plusieurs centaines d'hotel, possédant chacun plusieurs type de chambre dont les réservations sont enregistrées par jour.
Donc une table avec énormément d'enregistrement et les recherches deviennent trop longues.

Alors une ptite question pour ceux qui pourrait m'aider à optimiser la partie SQL

Actuellement, il n'y a que 2 tables utiles (seuls les champs utils sont listés).
La table CHAMBRE avec comme champs
id_chambre int
nom_chambre text
    (exemple de données :
        1 | chambre lit simple
        2 | chambre lit double
    )

et la table RESERVATION
id_reservation int
date_reservation date (format YYYY-MM-DD)
chambre_reservation int (correspondant à CHAMBRE.id_chambre)
    (exemple de données :
        1 | 2006-07-05 | 1
        2 | 2006-07-06 | 1
        2 | 2006-07-05 | 2
    )

Alors ce que je cherche à faire est simple mais je souhaiterais le faire si possible en une seule requête

A partir d'une date saisie par un utilisateur ($dDate) et le nombre de nuit où il va rester ($iNbNuits) je souhaiterais connaitres toutes les chambres etant disponibles pour toutes les dates de l'interval de temps.

Exemple
Si $dDate = '2006-07-05';
$iNbNuits = 4;

je souhaiterais connaitre toutes les chambres disponibles le 2006-07-05 ET le 2006-07-06 ET le 2006-07-07 Et le 2006-07-08

Le code php est fait, il ne me manque vraiment que la requete.
Actuellement j'ai cette requête
select * from reservation WHERE date_reservation >= '2006-07-05' AND date_reservation <= '2006-07-08'
Celle ci me ressort toutes mes chambres disponibles dans cet interval, certaines étant disponible qu'une nuit

Alors si quelqu'un a une idée :) je suis preneur


mercredi 5 juillet 2006 à 15:03:37 | Re : Requête sql de disponibilités

Teclis01

entre 2 dates ca s apelle BETWEN en SQL
donc essayes ca ira peut etre mieux

--------------------------------------------------------------------------------------------------
         Ilvaut mieux poser une question et passer pour bête que le rester toutesa vie

mercredi 5 juillet 2006 à 15:11:42 | Re : Requête sql de disponibilités

f6xara

Le problème ne vient pas des dates ni de l'intervalle de temps. Il vient que dans cette requete j'obtiens toutes les chambres ayant au moins une journée de disponible dans l'intervalle de temps et je souhaiterais avoir soit l'ensemble des chambres disponibles pou la totalité des jours soit au moins classées par le plus de jours disponibles de l'intervalle.

Pasque actuellement j'obtiens comme résultat
id_reservation    |   date_reservation   |    chambre reservation
1                           2006-07-05            1
2                           2006-07-05            2
3                           2006-07-06            1
4                           2006-07-07            1
5                           2006-07-07            2
10                         2006-07-08            1
11                         2006-07-08            2

Dans cet exemple la chambre 2 est disponible 3 jours sur 4 et la chambre 1 est disponible la totalité des jours
Donc que pourrais je rajouter dans ma requete pour qu'elle me ressorte que ceux disponibles dans la totalité des jours
(j'essaye avec des requetes imbriqué et des count() mais je n'avance pas :) )



mercredi 5 juillet 2006 à 15:35:59 | Re : Requête sql de disponibilités

Teclis01

on met les dates dans un tableau =>$aDates
deja tu recuperes ttes les id des chambres => $aIdChambre
foreach($aIdChambre as $iIdChambre){
$iCptJour=0;
    foreach($aDates as $sDate){
        $sSql='SELECT * FROM matable WHERE date_reservation='.$sDate;
        //on balance la requete
        //si lenregistrement existe alors $iCptJour++;
    }
    //on range dans un tableau le nombre de jour disponible,les dates disponibles et le numero de la chambre
}
//enfin on met en forme

J ai ptet oublié des choses mais en gros ca doit ressembler a ca

--------------------------------------------------------------------------------------------------
         Ilvaut mieux poser une question et passer pour bête que le rester toutesa vie

mercredi 5 juillet 2006 à 15:44:56 | Re : Requête sql de disponibilités

f6xara

Oui mais le but de ce post c est que cette solution n'est pas efficace car j'ai je crois pour l'instant 300 hotels contenant chacun 6 ou / types de chambres différents, donc ca me ferais déjà 2000 id_chambre et donc deja plus de 2000 requete par jour de l'interval à faire. donc si il s'agit d'un sejour de 2semaines, ca fait 28000 requêtes.

Vu qu'il s'agit d'un site pas mal fréquenté sur un serveur dédié, j'ai peur qu'il nuise à toutes les autres sites hébergés pendant la saison touristique.

donc j'essaye plus de me retourner sur une solution comme celle ci sachant qu'elle est fausse mais que ça doit etre possible
select * from reservation where chambre_reservation in (SELECT chambre_reservation FROM reservation WHERE date_reservation >= '2006-07-05' AND date_reservation <= '2006-07-08')


jeudi 6 juillet 2006 à 10:18:43 | Re : Requête sql de disponibilités

f6xara

Réponse acceptée !
C'est bon j'ai résolu mon problème :)
si ça peut aider quelqu'un voici comment j'ai fais

function dateXdays($X,$FromDate){ // date dans X jours
    $MyDate = explode('-',$FromDate);
    $XDate = getdate(mktime(0,0,0,$MyDate[1],$MyDate[2]+$X,$MyDate[0]));
    return($XDate['year'].'-'.sprintf('%02d', $XDate['mon']).'-'.sprintf('%02d', $XDate['mday']));
}

$sql = mysql_query("select chambre_reservation from reservation where date_reservation>='".$_POST['Adep'].'-'.$_POST['Mdep'].'-'.$_POST['Jdep']."' and date_reservation<='".dateXdays($_POST['NbNuit'], $_POST['Adep'].'-'.$_POST['Mdep'].'-'.$_POST['Jdep'])."' order by chambre_reservation asc");

$listeChambre = array();
while($result = mysql_fetch_assoc($sql)){
    // on compte combien d enregistrement on a par chambre comprises dans l'intervalle
    if(!isset($listeChambre[$result['chambre_reservation']])) { $listeChambre[$result['chambre_reservation']] = 1; }else{    $listeChambre[$result['chambre_reservation']]++; }
}
// tri du tableau pour avoir ceux ayant le plus d enregistrement
arsort($listeChambre);
$max = 0;
$newListe = array();
foreach($listeChambre as $k=>$v){
    // on enregistre le nombre d'enregistrement ayant le plus de critères voulus
    if($max==0){ $max = $v; }
    if($max>$v){ break; }else{ $newListe[] = $k; }
}
// $newListe contient toutes les chambres correspondant au mieux à la recherche





Cette discussion est classée dans : date, reservation, chambre, chambres, disponibilités


Répondre à ce message

Sujets en rapport avec ce message

reservation des chambre d'un hotel [ par xman ] bonjour je suis entrain de faire un site web pour une application scolaire en php/mysqldonc je galaire!!!!!!!!j'ai une table chambre,reservation,typec message echo inaproprié [ par oceane751 ] bonjour voilà mon problèmeun cliet veut reservation d'une chambre il choisit entre 2 types : 1personne et 2-3 personnesil peut choisisr lun ou l'autre reservation en ligne de chambre dans un hotel avec le ticket intelligent [ par salssabila ] salut     mon projet concerne la reservation en ligne de chambre dans un hotel avec le ticket intelligent. et j'ai un probleme dans  la notion de tick afficher les chambres disponibles entre deux dates [ par gouglou ] salut tout le monde,j'ai un probleme de trouver un code qui affiche les chambres disponibles d'un hotel entre deux dates , d'aprés une recherche par calendrier reservation dynamique [ par belkaiednaim ] bonjour,je suis a la recherche d'une calendrier de réservation de gites un peu compliqué car cette calendrier a des couleurs de date modifiable selon conception d'une centrale de reservation hoteliere [ par nejla1 ] bonjour, mon projet porte sur la conception et developpement d'une centrale de reservation hoteliere, je dois faire un diagramme des cas d'utilisation diagramme de classe d'une centrale de reservation hoteliere [ par nejla1 ] bonjour,mon projet porte sur la conception et developpement d'une centrale de reservation hoteliere,je dois élaborer le diagramme de classes,je ne sai besoin d'aide [ par arssuoy ] Bonjour  j'ai besoin d'aide concernant la reload de la page en conservant les même valeur entrer et en même temps exécute une requête mysql ce k je ve pb Systeme de reservation de salles en php mysql [ par ed1982 ] Bonjour,Je dois programmer un systeme de reservation de salle de reunion. Pour l instant je ne me contente que d une seule salle. Je veux pouvoir a pa Gestion de date dans une BDD [ par switsh ] Bonjour, Je suis actuellement en train de créer un calendrier rectiligne pour des réservations de chambres. Pour le moment j'ai le calendrier qui ma


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales