Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
[mysql/php]
#1
Mam 2 tabele z kursami walut, których struktura przedstawia się następująco:

WALUTA (łącznie 5 walut, które są stałe)
id
nazwa // np. dolar amerykański
kod // np. USD

WARTOSC
id
waluta_id
kurs // np. 2.76
data // np. 2011-04-10

Wykonuję zapytanie sql, które pobiera z bazy danych ostatnie 5 wyników za pomocą LEFT JOIN i wyświetla tabelę z kursami:
Kod:
SELECT * FROM waluta JOIN LEFT value ON valuta.id=wartosc.waluta_id ORDER BY wartosc.data DESC LIMIT 0,5

Następnie za pomocą skryptu php pobieram dane ze strony z kursami walut.
W zmiennej $waluty mam wówczas tablicę postaci:
Kod PHP:
Array ( [USD] => Array ( [name] => dolar amerykański [code] => USD [amount] => 2.80 [date] => 2011-05-27 ) [EUR] => Array ( [name] => euro [code] => EUR [amount] => 3.98 [date] => 2011-05-27 ) [CHF] => Array ( [name] => frank szwajcarski [code] => CHF [amount] => 3.26 [date] => 2011-05-27 ) [GBP] => Array ( [name] => funt szterling [code] => GBP [amount] => 4.59 [date] => 2011-05-27 ) [RUB] => Array ( [name] => rubel rosyjski [code] => RUB [amount] => 0.10 [date] => 2011-05-27 ) ) 

Teraz chciałbym wyświetlić w nowej tabeli ostatnich 5 kursów walut oraz 5 nowych koło siebie (tych niedawno pobranych, które znajdują się w tablicy), dodatkowo policzyć zmianę procentową między starym kursem, a nowym dla każdej waluty (zmiana_procentowa = 100%-stary_kurs*100%/nowy_kurs, gdy stary_kurs > nowy_kurs oraz zmiana_procentowa = stary_kurs*100%/nowy_kurs, gdy stary_kurs < nowy_kurs), tak aby widok tabeli był mniej więcej taki:

Lp. | Nazwa | Kod | Kurs | Data | Nowy kurs | Aktualna data | Zmiana procentowa
1 | dolar amerykański | USD | 2.76 | 2011-04-10 | 2.91 | 2011-05-27 | 1.05 %

Dodam, że w tej chwili zawartość tabeli WARTOSC jest następująca.

id | waluta_id | kurs| data
1 | 1 | 2.76 | 2011-04-10
2 | 2 | 4.07 | 2011-04-10
3 | 3 | 3.09 | 2011-04-10
4 | 4 | 4.66 | 2011-04-10
5 | 5 | 0.10 | 2011-04-10
9 | 1 | 2.91 | 2011-05-02
10 | 2 | 3.85 | 2011-05-02
11 | 3 | 3.19 | 2011-05-02
12 | 4 | 4.47 | 2011-05-02
13 | 5 | 0.12 | 2011-05-02

W jaki sposób tego dokonać? Jest możliwość, aby pominąć zapisywanie do tabeli WARTOSC nowych kursów? Ktoś pomoże?
Odpowiedz
#2
Wyciągasz dane z bazy danych i zaprzęgasz zwykłą szkolną matematykę.
Tworzysz sobie zmienne np. $x i $y i wykonujesz działania matematyczne. Poza tym dobrym rozwiązaniem może być zrobienie tabeli, która zawiera w sobie kurs waluty z poprzedniej daty. Czyli w momencie dodawania nowego wpisu napisz skrypt, który pobierze wartość z wpisu poprzedniego i doda go do nowego - mam nadzieję, że nie zamotałem za bardzo Smile Po takim zabiegu jeden wpis w bazie danych, będzie miał wszystkie nizbędne informacje. A na tych informacjach przeprowadzisz już odpowiednie obliczenia.
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Jak sprawdzić czy adres www znajduje sie w bazie mysql? jarekcda 8 9,025 13-05-2017, 01:02
Ostatni post: miketodson255
  Optymalizacja MySQL-a tomek_00 1 3,926 01-09-2013, 13:31
Ostatni post: hieroshima
  [MySQL] Struktura bazy dla słownika msx83 2 3,922 24-08-2013, 16:26
Ostatni post: msx83
  Komunikacja PHP z MySQL na serwerze pawstrze 5 6,445 16-07-2013, 15:58
Ostatni post: Engine
  [MySQL] wyszukiwarka problem darlowiak 3 3,554 13-06-2013, 12:58
Ostatni post: darlowiak

Skocz do:


Użytkownicy przeglądający ten wątek:
Sponsorzy i przyjaciele
SeoHost.pl