2010-03-30 7 views
0

J'ai une structure de planification sur deux tables pour stocker les slots disponibles par jour, et les sessions.Planification des slots/sessions de gestion

Un intervalle est défini par un intervalle de temps dans la journée. Les sessions ne peuvent pas se chevaucher et doivent être encapsulées dans un emplacement.

CREATE TABLE session (
    `id` int(11) NOT NULL AUTO_INCREMENT 
, `date` date 
, `start` time 
, `end` time 
); 

J'ai besoin de générer une liste de blocs de temps disponibles d'une certaine durée, afin de créer des sessions.

Exemple:

INSERT INTO slot 
    (date, start, end) 
VALUES 
    ("2010-01-01", "10:00", "19:00") 
, ("2010-01-02", "10:00", "15:00") 
, ("2010-01-02", "16:00", "20:30") 
; 

INSERT INTO slot 
    (date, start, end) 
VALUES 
    ("2010-01-01", "10:00", "19:00") 
, ("2010-01-02", "10:00", "15:00") 
, ("2010-01-02", "16:00", "20:30") 
; 

2010-01-01

<##><####>        <- Sessions 
------------------------------------  <- Slots 
10 11 12 13 14 15 16 17 18 19 20 

2010-01-02

  <##########>   <########> <- Sessions 
-------------------- ------------------ <- Slots 
10 11 12 13 14 15 16 17 18 19 20 

Je dois savoir quels espaces de 1 heure, je peux utiliser:

+------------+-------+-------+ 
| date  | start | end | 
+------------+-------+-------+ 
| 2010-01-01 | 13:00 | 14:00 | 
| 2010-01-01 | 14:00 | 15:00 | 
| 2010-01-01 | 15:00 | 16:00 | 
| 2010-01-01 | 16:00 | 17:00 | 
| 2010-01-01 | 17:00 | 18:00 | 
| 2010-01-01 | 18:00 | 19:00 | 
| 2010-01-02 | 10:00 | 11:00 | 
| 2010-01-02 | 11:00 | 12:00 | 
| 2010-01-02 | 16:00 | 17:00 | 
+------------+-------+-------+ 
+0

Etes-vous sûr que votre exemple est correctement indiqué? Vous ne remplissez jamais 'session'. –

Répondre

0

Je pense que votre vie va être beaucoup plus facile si vous approchez ce algorithme plutôt que d'utiliser une requête. Cela pourrait utiliser un sproc et cela pourrait signifier écrire un algorithme dans le niveau intermédiaire.

Ma recommandation est de simplement le faire au niveau intermédiaire. Rendez la base de données responsable du stockage des slots et des sessions et laissez les calculs à quelque chose de mieux adapté à la tâche.

Les bases de données sont destinées aux connaissances persistantes, et non à l'hébergement de la logique métier.

+0

J'essayais d'utiliser MySQL exclusivement car cela permet des manipulations et une maintenance plus faciles après avoir trouvé les blocs de temps. En fait j'ai déjà fait un algorithme PHP à cet effet, mais c'était assez lourd. Je pense que vous avez raison, je vais essayer d'en refaire un. –