![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 2.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
witam
mamy tabele, w ktorej jest pole daty - pobierany miesiac za pomoca date format(%c) oraz pole kwota. chcialbym zrobic zestawienie kwot dla danych miesiecy, czyli otrzymac tabelke w postaci: miesiac | 01-2010 | 02-2010 itd... kwota | 0 | 20 itd... przy czym moze sie zdazyc, ze dany miesiac nie wystepuje w bazie i wowczas chcialbym otrzymac kwote 0. i teraz mam pytanie - czy jest mozliwe, zeby jesli dany miesiac nie wystepuje w bazie np. styczen 2010, to zeby baza zwrocila kwote 0 dla tego miesiaca ? jesli tak, to w jaki sposob ? pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Szukasz optymalizacji w niewłaściwym miejscu.
Nie masz takiej tabeli jak napisałeś na początku, te statystyki i tak sobie liczysz na podstawie tabeli zlecenie. Nie podałeś jak naprawdę te tabele wyglądają, właściwie to nie wiadomo nawet po co te wszystkie łączenia, skoro i tak informacji o firmach nie potrzebujesz. Wygląda na to, że wszystko co trzeba wiedzieć masz w tabeli zlecenia i tylko na niej powinieneś operować. Najwięcej czasu nie będzie pochłaniać wykonanie iluś tam zapytań zwracających po 1 linijce zamiast dużego zwracającego wszystko, tylko liczenie zleceń w obrębie jednego miesiąca. Jeżeli baza będzie duża, to liczenie tego bez indeksów będzie głównym źródłem spowolnień. Proponowałbym utworzenie indeksu na data_z w zleceniach, a w zapytaniach operowanie wyłącznie na porównaniach typu mniejsze, większe, równe itp. Czyli dla podanego zakresu dat do wypisania statystyk jaki sobie użytkownik zażyczy liczysz kolejne miesiące w php, w ten sposób by dla każdego miesiąca już przed złożeniem zapytania mieć dwie ograniczające daty, które możesz porównać bez konieczności formatowania dat w sql. Czyli na przykład gotowe zapytanie dla 04.2011 powinno wyglądać tak:
Jeśli jednak upierasz się, by wykonać tylko jedno zapytanie, to musisz albo tworzyć tymczasową tabelę w procedurze, albo zdenormalizować trochę swoją bazę, wykorzystując dodatkową tabelę miesiace. Ten post edytował pmir13 6.05.2011, 09:12:01 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 06:56 |