- Micke F
- Medlem ●
- Höganäs
- 2004-03-18 14:16
Förutsättningar:
Två tabeller
"timmar"...
+---------+------+
| timme_id | timme |
+---------+------+
| 1 | 7
| 2 | 8
| 3 | 9
| 4 | 10
etc
| 17 | 23
+---------+------+------+------+------+
... och "bokningar"
+---------+------+------+------+------+
| id | start | slut | datum | aktivitet |
+---------+------+------+------+------+
| 2101 | 9:00:00 | 10:30:00 | 2004-03-11 | Testar |
| 2102 | 12:00:00 | 13:30:00 | 2004-03-18 | Testar | (obs datum!)
| 2103 | 14:30:00 | 15:45:00 | 2004-03-18 | Testar | (obs datum!)
| 2104 | 12:00:00 | 15:30:00 | 2004-03-28 | Testar |
| 2105 | 9:00:00 | 12:30:00 | 2004-03-29 | Testar |
+---------+------+------+------+------+
(innehåller ca 3000+ rader.)
Med sökningen:
$sql = (" SELECT timmar.timme, bokningar.Datum, bokningar.Aktivitet, TIME_FORMAT( AktStart, '%H.%i' ) AS aktst, TIME_FORMAT( AktSlut, '%H.%i' ) AS aktsl FROM timmar LEFT JOIN bokningar ON timmar.timme = TIME_FORMAT( AktStart, '%k' ) WHERE bokningar.datum = '2004-03-18' ORDER BY timmar.timme, bokningar.AktStart ");
Hittas följande:
+---------+------+------+------+------+
| timme | Datum | Aktivitet | aktst | aktsl |
+---------+------+------+------+------+
| 8 | 2004-03-18 | Testar| 12.00 | 13.30 |
| 9 | 2004-03-18 | Testar | 14.00 | 15.45 |
+---------+------+------+------+------+
Jag vill ju att ALLA timmar visas, även om de saknar motsvarighet i "bokningar"...
Det, upptäckte jag, ordnas till viss del genom att lägga till
OR bokningar.Datum IS NULL
i WHERE - satsen.
Ger :
+---------+------+------+------+------+
| timme | Datum | Aktivitet | aktst | aktsl |
+---------+------+------+------+------+
| 7 | NULL | NULL | NULL | NULL |
| 12 | 2004-03-18 | Testar| 12.00 | 13.30 |
| 14 | 2004-03-18 | Testar | 14.00 | 15.45 |
| 21 | NULL | NULL | NULL | NULL |
| 22 | NULL | NULL | NULL | NULL |
etc
+---------+------+------+------+------+
[B|Notera att "timme" inte visas 7-23![/B]
Det jag VILL visa är ju:
+---------+------+------+------+------+
| timme | Datum | Aktivitet | aktst | aktsl |
+---------+------+------+------+------+
| 7 | NULL | NULL | NULL | NULL |
| 8 | NULL | NULL | NULL | NULL |
| 9 | NULL | NULL | NULL | NULL |
| 10 | NULL | NULL | NULL | NULL |
| 11 | NULL | NULL | NULL | NULL |
| 12 | 2004-03-18 | Testar| 12.00 | 13.30 |
| 13 | NULL | NULL | NULL | NULL |
| 14 | 2004-03-18 | Testar | 14.00 | 15.45 |
| 15 | NULL | NULL | NULL | NULL |
| 16 | NULL | NULL | NULL | NULL |
| 17 | NULL | NULL | NULL | NULL |
etc
| 23 | NULL | NULL | NULL | NULL |
+---------+------+------+------+------+
Om du orkat läsa så här långt:
Hur kan jag åstadkomma detta?
Fråga 2:
Om du detta går att ordna, hur optimerar jag JOIN-funktionen så att sökningen går så snabbt som möjligt?
Tacksam för hjälp...
/M