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

MySQL Discussion :

Gestion de tranches horaires


Sujet :

MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Gestion de tranches horaires
    Bonjour,
    Je vous explique ma problématique :

    1ere chose :
    j'ai des utilisateurs qui saisissent des tranches de disponibilités, par jour/heure. Ex, jeudi 8 octobre, dispo de 8h à 20h. Je stock ça dans une table avec 2 timestamp, un de début de créneau et un autre de fin.

    2ème chose :
    ces utilisateurs sont "bookés", c'est à dire que par ex, ils deviennent indisponibles le 8 octobre de 12h à 14h. Pareil pour le stockage, je stock 2 timestamp, un de début et un de fin.

    Ma question est :
    comment (si possible en 1 seule requête) récupérer la liste des créneaux encore disponible ? En l’occurrence ici, de 8h à 12h et de 14h à 20h.

    Merci
    Poubs.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Difficile de vous aider si on n'a pas au moins la structure des tables.

    Fournissez un jeu d'essai sous forme de CREATE TABLE... + INSERT INTO... avec le résultat attendu.

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 346
    Points : 18 958
    Points
    18 958
    Par défaut
    Salut poubs.

    Vu le peu d'information que tu nous donnes sur ton problème, la solution que l'on va te proposer ne sera pas nécessairement ce que tu attends.
    Il y a en général deux approches pour résoudre un problème :
    --> soit on part des contraintes de départ et l'on cherche comment mettre en oeuvre la solution finale.
    --> soit on part de la solution final et l'on cherche comment l'obtenir à partir de ce que l'on peut faire.

    Ici, ta contrainte est que tu pars avec deux tables, dont l'une contient les tranches de disponibilités (ma table test1) et l'autre leur indisponibilité (ma table test2).
    Par une jointure du genre produit cartésien, je cherche l'inclusion de leur indisponibilité dans les tranches de disponibilités.
    Ce qui donne : (date1deb < date2deb) et (date2fin < date1fin).
    Voici un exemple des plus basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test1`
    --------------
     
    --------------
    CREATE TABLE `test1`
    (
      `id`        int        NOT NULL AUTO_INCREMENT,
      `date1deb`  datetime   NOT NULL,
      `date1fin`  datetime   NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test1` (`date1deb`,`date1fin`) values
    ('2015-10-09 08:00:00', '2015-10-09 20:00:00'),
    ('2015-10-10 08:00:00', '2015-10-10 20:00:00')
    --------------
     
    --------------
    select * from test1
    --------------
     
    +----+---------------------+---------------------+
    | id | date1deb            | date1fin            |
    +----+---------------------+---------------------+
    |  1 | 2015-10-09 08:00:00 | 2015-10-09 20:00:00 |
    |  2 | 2015-10-10 08:00:00 | 2015-10-10 20:00:00 |
    +----+---------------------+---------------------+
    --------------
    DROP TABLE IF EXISTS `test2`
    --------------
     
    --------------
    CREATE TABLE `test2`
    (
      `id`        int        NOT NULL AUTO_INCREMENT,
      `date2deb`  datetime   NOT NULL,
      `date2fin`  datetime   NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `test2` (`date2deb`,`date2fin`) values
    ('2015-10-08 12:00:00', '2015-10-08 14:00:00'),
    ('2015-10-09 12:00:00', '2015-10-09 14:00:00')
    --------------
     
    --------------
    select * from test2
    --------------
     
    +----+---------------------+---------------------+
    | id | date2deb            | date2fin            |
    +----+---------------------+---------------------+
    |  1 | 2015-10-08 12:00:00 | 2015-10-08 14:00:00 |
    |  2 | 2015-10-09 12:00:00 | 2015-10-09 14:00:00 |
    +----+---------------------+---------------------+
    --------------
    select date1deb, date2deb, date2fin, date1fin
    from test1, test2
    where date1deb < date2deb
    and   date1fin > date2fin
    --------------
     
    +---------------------+---------------------+---------------------+---------------------+
    | date1deb            | date2deb            | date2fin            | date1fin            |
    +---------------------+---------------------+---------------------+---------------------+
    | 2015-10-09 08:00:00 | 2015-10-09 12:00:00 | 2015-10-09 14:00:00 | 2015-10-09 20:00:00 |
    +---------------------+---------------------+---------------------+---------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    Au lieu de te casser la tête à déterminer les tranches horaires qui sont disponibles, je demanderai à l'utilisateur de remplir un tableau où la plus petite tranche horaire serait l'heure.
    A partir de là, tu aurais l'information pour une heure donnée, et pour un utilisateur donnée si elle est disponible ou pas.

    Maintenant, tu ne nous indiques pas comment tu vas représenter ton résultat final ?
    Et cela conditionne grandement ce que tu cherches à faire au final.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Problème de tranche horaire.
    Par jeremie74 dans le forum Requêtes
    Réponses: 3
    Dernier message: 25/07/2006, 17h33
  2. Requête tranche horaire disponibilité
    Par jeremie74 dans le forum Requêtes
    Réponses: 8
    Dernier message: 25/07/2006, 17h08
  3. Récupérer des enregistrements par tranche horaire
    Par olive_le_malin dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 19/05/2006, 17h53
  4. Gestion des fuseaux horaires :-/
    Par kalash_jako dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 24/04/2006, 00h02
  5. Calcul de tranches horaires
    Par zach dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 02/08/2005, 09h26

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