Immagina una webapp domotica, per comandare un riscaldatore.
Potresti configurare N piani, per un piano intendo una tabella simile:
+----+---------+--------------------+
| id | name | target_temperature |
+----+---------+--------------------+
| 1 | confort | 19 |
+----+---------+--------------------+
| 2 | hot | 22 |
+----+---------+--------------------+
| 3 | night | 17 |
+----+---------+--------------------+
PSEUDOCODE
(if plan is confort && temperature<19 then heater on)
Immagina di configurare uno scenario simile:
MONDAY:
from 00:00 to 07:00 >> plan is night
from 07:00 to 08:00 >> plan is hot
from 16:00 to 18:00 >> plan is hot
from 18:00 to 22:00 >> plan is confort
from 22:00 to 23:59 >> plan is night
[...]
SATURDAY:
from 00:00 to 23:59 >> plan is confort
Nota che il lunedì dalle 08:00 alle 18:00 non c'è un piano. Il software verrà impostato su OFF the heater.
Come progetteresti il database dei giorni? Un tavolo singolare con 7 colonne (dal lunedì alla domenica) e ogni riga N righe? Non mi piace, perché il sabato è completamente diverso da lunedì.
Una tabella singolare con 24 (o 48) righe e 7 colonne? WHERE le righe vanno dalle 00:00 alle 23:59
+-----+-------+-------+---------+-----+---------+-------+
| id | hour | M | T | […] | S | S |
+-----+-------+-------+---------+-----+---------+-------+
| 1 | 00:00 | night | hot | | night | night |
+-----+-------+-------+---------+-----+---------+-------+
| 2 | 00:30 | night | night | | confort | null |
+-----+-------+-------+---------+-----+---------+-------+
| 3 | 01:00 | night | night | | confort | null |
+-----+-------+-------+---------+-----+---------+-------+
| 4 | 01:30 | hot | confort | | confort | null |
+-----+-------+-------+---------+-----+---------+-------+
| 5 | 02:00 | hot | hot | | confort | null |
+-----+-------+-------+---------+-----+---------+-------+
| 6 | 02:30 | null | null | | confort | hot |
+-----+-------+-------+---------+-----+---------+-------+
| […] | | | | | | |
+-----+-------+-------+---------+-----+---------+-------+
| 50 | 23:30 | hot | hot | | null | null |
+-----+-------+-------+---------+-----+---------+-------+
| 51 | 23:59 | night | night | | night | null |
+-----+-------+-------+---------+-----+---------+-------+
E dove il NULL significa "Ehi! Metti il riscaldatore su OFF!" ...
Quindi, la query per ottenere il PIANO APPLICABILE CORRENTE potrebbe essere un semplice
SELECT * FROM TEST WHERE hour =
(
SELECT MAX(hour) FROM TEST WHERE hour < CURTIME()
)
Ma in questo caso il difficile potrebbe essere selezionare il giorno giusto! Come selezionare solo la colonna "Lunedì"?
Grazie:)