Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów
[mysql/php] - Wersja do druku

+- Forum Webmastera, HTML, CSS, PHP, MySQL, Hosting, Domeny - Forum dla Webmasterów (https://www.webmastertalk.pl)
+-- Dział: Technologie internetowe - tworzenie stron WWW (https://www.webmastertalk.pl/forum-technologie-internetowe-tworzenie-stron-www)
+--- Dział: Programowanie, Bazy danych (https://www.webmastertalk.pl/forum-programowanie-bazy-danych)
+--- Wątek: [mysql/php] (/thread-mysql-php)



[mysql/php] - SavageMephisto - 27-05-2011

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?


RE: [mysql/php] - kmd - 28-05-2011

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.