Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: nietypowe zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
batman
Witam.
Mam problem z zapytaniem sql. A dokładniej rzecz biorąc z brakiem tego zapytania. Mam tabelę, w której przechowywane są kursy walut. Każdy kurs ma przypisaną datę. Są dni, w których nie wprowadza się kursów do bazy. Np.
2004-01-05 | 3.5, 2004-01-06 | 3.45, 2004-01-08 3.44, itd.

W jaki sposób zbudować zapytanie, by wyświetliło mi wszystkie dni (również tych, których nie ma). W miejsce kursu nieistniejącego dnia należy wstawić ostatni kurs, jaki był przed brakującym dniem. Baza - mysql 3.23

Mam nadzieję, że jasno przedstawiłem sprawę winksmiley.jpg
ActivePlayer
Cytat
W jaki sposób zbudować zapytanie, by wyświetliło mi wszystkie dni (również tych, których nie ma)


Wszystkich dni jest nieskonczenie wiele... chodiz o dni od 1 wpisu do bazy do now(); ?
batman
Racja. Nie napisałem dokładnie. Chodzi oczywiście od jakiejś daty do dnia dzisiejszego, ewentualnie innej daty.
orson
witam ...

selectuj wszystko przy wyświetlaniu sprawdzaj w php czy poprzednia data to jest obecna - 1 ... samym sql może być trudno (chyba nawet się nie da) to zrobić ...

pozdrawiam
batman
Nie da rady sprawdzać w php data-1, ponieważ w bazie jest kilka tysięcy wierszy i z każdym dniem przybywa. Każde spawdzenie spowoduje spowolnienie działanie aplikacji. Najlepszym rozwiązaniem byłoby jedno zapytanie sql.
orson
witam ...

to ty chcesz wyświetlać kilkatysięcy wierszy na ekranie na raz questionmark.gifquestionmark.gif powinieneś dzielić to na kawałki i wyświetlać w tygodniach lub miesiącach ... wtedy masz dużo mniej na raz i możesz sprawdzać ...

pozdrawiam
batman
Chcę te kilka tysięcy wierszy zapisać do pliku xml. Metoda ta działa bardzo ładnie, z jedną wadę - nie wyświetla dni, których nie ma w tabeli. W te dni obowiązuje kurs z dnia poprzedniego i to muszę uzyskać.
orson
witam ...

w sql nie da się tego uzyskać ... chyba że zrobisz sobie tabelkę z jedną kolumną date i tam po kolei daty wszystkie ... potem joinując można uzyskać wszystkie daty i nulle w pustych miejscach ... ale nadal nie wiem czy da się rozwiązać pobranie wartości z poprezedniego dnia ... w php to nie będzie bardzo powolne ... możesz pobierać z bazy datę w formacie YYYYMMDD (czyli <kolumna_Date>+0) i porównywać na zasadzie liczb (tylko jak jest dzień 01 inaczej)

pozdrawiam
batman
Nie chodzi mi o php. W php rozwiązanie już dawno znalazłem. Chodz mi o rowiązanie tego problemu w sql lub informację, że się nie da tego zrobić w sql. Z góry dziękuje za pomoc.

Cytat
w php to nie będzie bardzo powolne


Będzie powolne uwierz mi na słowo winksmiley.jpg
Synaps
Żeby wyświetlić też dane dla dni których nie ma w tabeli z kurasmi, musisz zrobić złączenie left lub right z tabelą która posiada pełen kalendarz. Najłatwiej to zrobić generując sobie właśnie tabele z kalendarzem, dni po koleji w jakiś tam oknie czasu. Nastepnie robisz złączenie z tą tabela i masz gotowy wynik. Co do wpisów brakujących to przy przetwarzaniu wyniku prosty if i po sprawie.

-----edit
nie widzialem ostatniego wpisu orsona cool.gif

----edit 2
Cytat
Będzie powolne uwierz mi na słowo


A ja się założe, że spadek wydajności przy zaproponowanym przez orsona sposobie będzie akceptowalny, czyli bardzo mało. Jeden if przy tworzeniu XML'a będzie nie zauważaly. Chyba że chcesz zrezygnować z php'a do exportu i korzystasz z jakiegos innego narzedzie, wtedy ten spor nie ma sensu btw: z mysql'a 3.23 nic więcej nie uzyskasz
batman
Niestety musi być mysql 3.23. Dzięki za radę pokombinuję z joinem. Rola php kończy się na generowaniu xml'a. Resztę zabawy pozostawim aplikacji napisanej we flashu, która ma te kursy wyświetlić. A co do wydajności, to spadek jest ogromny, ponieważ należy wykonać cztery takie zapytania. Każde z zapytań wyciąga dane z innej tabeli. Dodatkowe if'y czy sql spowolni ten skrypt, a co za tym idzie rysowanie wykresu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.