Mailinglisten-Archive |
Hi, und hier meine Ueberlegungen: Es gibt Pruefzeiten (aus der DB) und die neuZeit (vom Formular) Dabei treten IMHO drei Faelle auf: (@nStart >= start)&&(@nStart < endet) # @nStart ist in der Pruefzeit (@nEndet > start) &&(@nEndet <= endet) # @nEndet ist in der Pruefzeit (@nStart < start) &&(@nEndet > endet) # neuZeit ueberdeckt Pruefzeit Hat man viele Eintraege, wird jeder einzeln geprueft, doch es interessiert nur die Summe. SELECT SUM(IF((@nStart >= start) && (@nStart < endet) OR (@nEndet > start) && (@nEndet <= endet) OR (@nStart < start) && (@nEndet > endet), 1, 0)) AS Test FROM zeiterfassung WHERE name = 'Otto' AND atag = '2004-01-21'; In dem Beispiel liegen die Eintraege wie folgt +-------+------+------------+----------+----------+ | id | name | atag | start | endet | +-------+------+------------+----------+----------+ | 15103 | Otto | 2004-01-21 | 05:00:00 | 06:00:00 | | 15104 | Otto | 2004-01-21 | 07:00:00 | 08:00:00 | | 15105 | Otto | 2004-01-21 | 09:00:00 | 10:00:00 | | 15106 | Otto | 2004-01-21 | 11:00:00 | 12:00:00 | +-------+------+------------+----------+----------+ Beispiel: SET @nStart = '06:00:00'; # neuZeit SET @nEndet = '07:00:00'; # neuZeit +------+ | Test | +------+ | 0 | nach obigem Query +------+ 1 row in set (0.05 sec) +------+ | Test | +------+ | 2 | nach dem vorgeschlagenen Query +------+ 1 row in set (0.06 sec) Das ist auch logisch, weil BETWEEN laut Handbuch immer bei "groesser-gleich A && kleiner-gleich B" TRUE ausgibt, dies jedoch hier nicht so sein kann/darf. Getestet wurde auf einer Tabelle mit 64.935 Eintraegen. m. b. G. Norbert _____________________ normal: 02682-966898 Notruf: 0163-3613642 --------------------- e.o.m.
php::bar PHP Wiki - Listenarchive