Avatar billede nemlig Professor
07. oktober 2009 - 22:40 Der er 8 kommentarer og
1 løsning

Tjek om der er dato-huller i kalenderåret

Hejsa.
Jeg har en MySQL database, hvor jeg har nogle periodeposter

ID Startdato  Slutdato
1  2009-01-01  2009-03-15
2  2009-03-16  2009-07-20
3  2009-07-21  2009-09-17
4  2009-09-20  2009-12-31

Hvordan tjekker jeg, om alle årets dage er repræsenteret i disse poster.
I dette eksempel er perioden 2009-09-18 til 2009-09-19 ikke defineret.
Er det noget med at hente alle perioder og sammentælle dagene og holde op mod det antal dage, der faktisk er i året.
Jeg arbejder med PHP.
Avatar billede Gudiik Nybegynder
07. oktober 2009 - 22:46 #1
Vil du have dato'erne som ikke findes afvide, eller skal du bare have et tal på hvor mange der mangler?.

/gudiik
Avatar billede nemlig Professor
07. oktober 2009 - 22:55 #2
Jeg behøver ikke datoerne.
Et tal på, hvor mange dage, der mangler, vil være super.
Avatar billede Gudiik Nybegynder
07. oktober 2009 - 23:03 #3
Kender ikke lige en super let måde at gøre det på, men en måde man kunne gøre det på var at lave en while, som tager slutdato i linje1, også start dato'en i linje 2, ser hvor stort et mellerum der er mellem de 2 tal. Gemmer tallet i en variabel. Også gøre det forfra igen, indtil while'en er færdig. Også burde du have et tal på hvor mange dato'er der mangler.

Håber du forstår hvad jeg mener ellers må du sige til.
Avatar billede nemlig Professor
07. oktober 2009 - 23:08 #4
OK - jeg forstår.
Jeg afventer lige andre forslag, som måske kan være nemmere at gå til.
Avatar billede Gudiik Nybegynder
07. oktober 2009 - 23:44 #5
Er også sikker på at der findes nemmere måder. Men ikke lige noget jeg kender til :-). Men held og lykke med søgningen.
Avatar billede arne_v Ekspert
08. oktober 2009 - 02:19 #6
Den simple løsning må være at oprette en tabel med en enkelt kolonne og en række for hver dag i året.

SELECT COUNT(*)
FROM aartabel
WHERE NOT EXISTS(SELECT * FROM dintabel WHERE aartabel.dato BETWEEN dintabel.startdato AND dintabel.slutdato)
Avatar billede arne_v Ekspert
08. oktober 2009 - 02:21 #7
Alternativt ville jeg flytte logikken op i applikationen. Lave et array med 365/366 false værdier. Læse din tabel og sætte array elementer til true for hver række. Til sidst løbe array igennem og tælle op.
Avatar billede nemlig Professor
08. oktober 2009 - 23:26 #8
Tak for inspirationen.
Løsningen blev at jeg hev alle poster ud, og lavede en while, hvor jeg talte dagene fra startdato til slutdato. Det samlede tal sammenligner jeg så med antal dage fra 01-01 til 31-12.
Send venligst et svar og jeg fordeler pointene.
Avatar billede arne_v Ekspert
08. oktober 2009 - 23:39 #9
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester