Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pętle w Mysql - wypisanie wszystkich dat z przedziału, Loop in MySQL
Sztef89
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

Ostrzeżenie: (0%)
-----


Witam,

Szukam polecenia pasującego do mojego zadania lecz nic nie pasuje a całość chciałbym zrealizować po stronie bazy danych.

Otóż mam dwie daty startową i końcową oraz rekordy w bazie, każdy z tych rekordów ma datę start i stop.
Chciałbym wyświetlić wszystkie dni od daty startowej do końcowej zliczając ile tych rekordów będzie pasowało do poszczególnych dat.

Nie chce rozbijać tych czynności na php.

Domyślam się że w MySQL trzeba będzie zastosować jakąś pętle. Najważniejsze jest dla mnie aby zapytanie było szybkie = wydajne.

Rekordów mam ponad 1000.

Z góry dziękuję za pomoc, jak coś uda mi się znaleźć to tu umieszczę, może wspólnymi siłami dojdziemy jak to zrobić (IMG:style_emoticons/default/smile.gif)

Pozdrawiam serdecznie
Stefan
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sztef89
post
Post #2





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.12.2010

Ostrzeżenie: (0%)
-----


Zamiast odsyłać mnie do Google gdzie nic nie znalazłem (pisałem o tym na początku) to wolałbym abyś po swojemu odpowiedział na mój problem.

Mój problem nie polega na wyświetlanych danych z jakiegoś przedziału datowego - do tego podajesz mi odnośniki.

Chodziło mi o WYGENEROWANIE wszystkich dat z jakiegoś przedziału datowego, a następnie przeszukanie bazy żeby dla każdej wartości datowej policzył wiersze.

Rozwiązałem to w taki sposób że zrobiłem nową tabelę która zawiera wygenerowane daty z przedziału na którym będę pracował (wyszło 2400 wartości), wszystko udało mi się zrobić tak jak chce lecz czas wykonania polecenia pozostawia wiele do życzenia ~0.03s (i7,ssd), przez co zapytanie staje się bezużyteczne bo liczyłem na przynajmniej 0.001s.

Im większy przedział datowy mam do przeliczenia tym zapytanie wykonuje się dłużej :/
Indeksy oczywiście dodane do pól które występują w warunkach i grupowaniu

Oto mój kod:

  1. SELECT d.id, d.DATA, COUNT( * ) AS ilosc
  2. FROM `daty` d
  3. LEFT JOIN `dane` s ON d.DATA BETWEEN s.start AND s.end
  4. WHERE d.`data` BETWEEN (SELECT MIN(`start`) FROM `dane`)
  5. AND (SELECT LEAST(CURDATE(), MAX(`end`)) FROM `dane`)
  6. GROUP BY d.`data`
  7. ORDER BY d.`data`


Tabela daty: 2400 wierszy
Tabela dane: 1450 wierszy

Ten post edytował Sztef89 9.01.2014, 19:40:05
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 19:34