IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Listing / Comment optimiser cette base de donnée


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Points : 25
    Points
    25
    Par défaut Listing / Comment optimiser cette base de donnée
    Bonjour,

    J'ai un moteur de recherche pour réserver un salle de karaoke. Dans ce moteur, on renseigne le nombre de places souhaité ainsi que la date, l'heure d'arrivée et l'heure de départ.

    Sur base de ces deux tables :

    salles
    -----
    NUMERO (INT)
    ETAGE (INT)
    PLACES (INT)

    réservations
    -----------
    ID (INT)
    NUMERO_SALLE (INT)
    DATE_ARRIVEE (DATETIME)
    DATE_DEPART (DATETIME)

    Est-il possible en une seule requête de n'afficher que les salles disponibles aux date et heures renseignées via le fomulaire ?

    Sinon que me conseillez-vous pour optimiser ?

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut
    Optimisation :

    Clé primaires sur
    NUMERO (INT) de salles
    ID (INT) de réservations

    Si NUMERO_PIECE (INT) correspont bient à une clé etrangere de salles (a un numéro de salle) place y un INDEX

    sinon pour la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `salles` as s LEFT JOIN `réservations` as r ON s.`NUMERO` = r.`NUMERO_PIECE` WHERE `DATE_ARRIVEE`='champformulaire' AND `DATE_DEPART`='date formulaire'
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Points : 25
    Points
    25
    Par défaut
    Salut, j'ai comme un doute.

    Je vais vous mettre les requêtes en gros comme je les ferais avec les connaissances que j'ai actuellement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `salles` WHERE `places` = formulaire_places
    J'obtiens donc une liste de lignes et pour chacune de celles-ci je vérifie si les heures d'arrivée et de départ saisies dans le formulaire ne sont pas à cheval sur des réservations existantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(`id`) FROM `reservations` WHERE `numero_salle` = resultat_numero AND ((`date_depart` >= 'formulaire_date formulaire_heure_depart:00:00' AND `date_arrivee` <= 'formulaire_date formulaire_heure_arrivee:00:00') OR (`date_depart` >= 'formulaire_date formulaire_heure_arrivee:00:00' AND `date_arrivee` <= 'formulaire_date formulaire_heure_depart:00:00'))
    Ca fait beaucoup de requêtes en fonction du nombre de résultats que la première me retourne.

    En espérant avoir été plus clair.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Points : 25
    Points
    25
    Par défaut
    Salut, sachant que je travaille sous MySQL 3.23 j'avais pensé à une requête de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT s.* , IF( COUNT( r.* ) = 0, 'oui', 'non' ) AS `libre`
    FROM `SALLES` s
    LEFT JOIN `RESERVATIONS` r ON s.`numero` = r.`numero_salle`
    WHERE s.`places` >= " . $_POST['places'] . "
    AND ((r.`date_arrivee` <= '" . $date_arrivee . "' AND r.`date_depart` >= '" . $date_arrivee . "') OR (r.`date_arrivee` <= '" . $date_depart . "' AND r.`date_depart` >= '" . $date_depart . "'))
    GROUP BY r.`numero_salle`
    étant donné que celle-ci me sort un résultat satisfaisant (afficher le nombre de résa) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT s.* , COUNT( r.`id` ) 
    FROM `salles` s
    LEFT JOIN `reservations` r ON s.`numero` = r.`numero_salle` 
    GROUP BY `numero`
    Merci d'avance

Discussions similaires

  1. [VB.NET] Comment compacter une base de données Access ?
    Par xVINCEx dans le forum Contribuez
    Réponses: 6
    Dernier message: 05/06/2008, 18h35
  2. Comment créer une base de donnée Access ?
    Par Soulama dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/10/2005, 14h56
  3. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07
  4. comment vider une base de donnée
    Par caps_corp dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 21/04/2004, 16h54
  5. Comment acceder à une base de donnée F1.db_ ?
    Par diado dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 26/12/2003, 08h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo