Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 22.10.2008 Ostrzeżenie: (0%)
|
Witam,
chciałbym obliczyć ilość miesięcy jaka upłynęła między datami. Nie jest to standardowy przypadek ponieważ trzeba wziąć pod uwagę zazębianie się dat. Najłatwiej przedstawić to na przykładzie urlopów 1. Urlop między 2012-01-01 a 2012-06-31 2. Urlop między 2012-04-01 a 2012-07-31 3. Urlop między 2012-05-01 a 2012-05-31 4. Urlop między 2012-10-01 a 2012-11-31 Pytanie: ile miesięcy był na urlopie? (oczywiście zazębienie dat powinno być wykrywane na etapie dodawania urlopów, ale potrzebuje to do innego skryptu a na przykładzie urlopów najłatwiej wytłumaczyć). Urlop 1,2 i 3 jest zazębiony. Oczywiście daty mogą być zazębione w różny inny sposób. W wyniku powinienem dostać odpowiedź: 9 miesięcy, czyli nie jest to suma(urlop1;urlop2;urlop3;urlop4). Do tej pory poradziłem sobie tak, że wpisuje do tablicy miesiące poszczególnych urlopów czyli: I teraz usuwam duplikaty i otrzymuje unikalne miesiące, których suma daje mi długość urlopów. Problem w tym, że wykonuje się to bardzo długo, bo 7 minut dla 7000 rekordów (w końcu powyższe operacje wykonuje osobno dla każdego rekordu). Może inne pomysły związane z operacjami na zakresach dat? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%)
|
Niestety skrypt generuje się i tak 6 minut z racji wielu innych opetacji. Jest 7 000 rekordów i dla każdego z nich muszę przypisać dane z drugiej tabeli B gdzie mam 100 000 rekordów... Z kolei na każdym rekordzie z tabeli B muszę zrobić proste operacje na datach (rrrr-mm-dd + 1 miesiąc) itp. Każda z sekcji wykonuje się ok ale przy uruchomieniu wszystkich czas się wydłuża. Cachuje wyniki więc nie jest najgorszej. Dzięki wszystkim za pomoc! Z bazami nie pomogę zbyt wiele, bo wielkiego doświadczenia nie mam - ale czy nie myślałeś o tym, aby przynajmniej część tej "czarnej" roboty (że wspomnę tylko o przypisywaniu danych - to można zrobić złączeniem/JOIN) zrzucić na bazę danych? Przy dobrze zaprojektowanej bazie danych mogłoby to przynieść znaczny wzrost wydajności... Jeśli to rozważasz, to są tu na forum mocarze, którzy z pewnością coś pomogą... Poczytaj sobie subforum 'bazy danych' |
|
|
|
mlodyno [php] Sumowanie zakresów wielu dat 10.09.2012, 10:08:35
CuteOne Hmm trudna sprawa
[PHP] pobierz, plaintext while... 10.09.2012, 11:41:59 
mlodyno Cytat(CuteOne @ 10.09.2012, 12:41:59 ... 10.09.2012, 14:18:58
melkorm Tę pętle lepiej zamienić na:
[PHP] pobierz, plaint... 10.09.2012, 15:16:49
abort A ja bym poszedł innym tropem. Po pierwsze, nie li... 10.09.2012, 23:08:07
wNogachSpisz 1. Podziel na stringi "YYYMM"
2. Wrzuc d... 11.09.2012, 08:09:41
CuteOne Sposobów na rozwiązanie problemu jest masa... pyta... 11.09.2012, 08:14:29
wNogachSpisz @up odpowiedź masz w pierwszym poście.
Twój kod ni... 11.09.2012, 08:31:41
mlodyno Dziękuję wszystkim za aktywną pomoc. Testuję po ko... 13.09.2012, 12:43:53 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 16:39 |