![]() |
![]() ![]() |
![]() |
-DreamCatcher- |
![]()
Post
#1
|
Goście ![]() |
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 kod WARTOSC id waluta_id kurs data Wykonuję zapytanie sql, które pobiera z bazy danych ostatnie 5 wyników za pomocą LEFT JOIN i wyświetla tabelę z kursami:
Następnie za pomocą skryptu php pobieram dane ze strony z kursami walut. W zmiennej $waluty mam wówczas tablicę postaci:
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), tak aby widok był mniej więcej taki: Lp. | Nazwa | Kod | Kurs | Data | Nowy kurs | Aktualna data | Zmiana procentowa W jaki sposób tego dokonać? Jest możliwość, aby pominąć zapisywanie do tabeli WARTOSC nowych kursów? Ktoś pomoże? |
|
|
-Gość- |
![]()
Post
#2
|
Goście ![]() |
Łatwiej by było chyba jednak zapisać te pobrane wartości z tablicy (array(usd,eur,...)) w bazie danych w tabeli wartosc. Pozniej policzyc zmiany procentowe dla kazdej waluty, a dopiero pozniej za pomoca zapytania SQL wypelnic tabele danymi. Ale jak by wygladalo takie zapytanie, które pobiera odpowiednie informacje, nie wiem. Jakas tega glowa musi ci pomoc.
A jakie masz dane (chodzi mi o zawartosc) w tabeli WARTOSC? |
|
|
-DreamCatcher- |
![]()
Post
#3
|
Goście ![]() |
Tabela WARTOSC ma w tej chwili następujące dane:
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 A zatem jakiego zapytania SQL użyć, aby policzyć te zmiany procentowe dla każdej waluty i wyświetlić wyniki w postaci: Lp. | Nazwa | Kod | Kurs | Data | Nowy kurs | Aktualna data | Zmiana procentowa 1 dolar USD 2.76 2011-04-10 2.91 2011-05-27 1.05 % |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 27.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Przykładowe rozwiązanie:
Biorę 3 tabele: WALUTA: id nazwa kod WARTOSC id walutaid kurs data WARTOSCNOWA walutaid nowykurs aktualnadata W celu prostoty tabela wartosc zawiera tylko 5 wejściowych rekordów, każdy z inną walutą natomiast tabela wartoscnowa zawiera 5 rekordów ze zmiennej $waluty obrazującej aktualne kursy 5 walut. Wówczas zapytanie wygląda tak:
Dodatkowo podczas odczytu rekordów z MYSQL skrypt PHP tworzy mi dodatkową kolumnę Zmiana procentowa i to na tym poziomie przez manipulację zmiennymi zapełniam ją wartościami:
Wynik: ![]() |
|
|
-DreamCatcher- |
![]()
Post
#5
|
Goście ![]() |
Dzięki Tomal40 za odzew i poświęcony czas.
Pomyślałem, że jednak wykorzystam tę tabelę WARTOSC. 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 Załóżmy, że te powyższe dane to stare kursy walut w tabeli. Natomiast te poniższe, to pobrane aktualne kursy ze strony. id | waluta_id | kurs| data 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 wywołać zapytanie SQL, aby wyświetlić w jednej tabelce 5 wyników, w taki oto sposób? Lp. | Nazwa | Kod | Kurs | Data | Nowy kurs | Aktualna data | Zmiana procentowa 1. | dolar | USD | 2.76 | 2011-04-10 | 2.91 | date('Y-m-d') | % 2. | euro | EUR | 4.07 | 2011-04-10 | 3.85 | date('Y-m-d') | % 3. | frank | CHF | 3.09 | 2011-04-10 | 3.19 | date('Y-m-d') | % 4. | funt | GBP | 4.66 | 2011-04-10 | 4.47 | date('Y-m-d') | % 5. | rubel | RUB | 0.10 | 2011-04-10 | 0.12 | date('Y-m-d') | % Co należy jeszcze uwzględnić w poniższym zapytaniu? <code=sql> SELECT * FROM waluta LEFT JOIN wartosc ON waluta.id=wartosc.waluta_id ORDER BY wartosc.DATA DESC LIMIT 0,10 </code> Proszę o wyrozumiałość. Tego typu zapytania sprawiają mi kłopot. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Musisz wiedzieć [znaczy skrypt musi wiedzieć] które dane chcesz pobrać - znaczy, z którego dnia
9 | 1 | 2.91 | 2011-05-02 ---- 1 | 1 | 2.76 | 2011-04-10
Innymi słowy zrób dwa zapytania i połącz je wg. id waluty |
|
|
-DreamCatcher- |
![]()
Post
#7
|
Goście ![]() |
To rozw. z dwoma selectami nie jest wydajne i w dodatku jest niewygodne, więc zmieniłem nieco swój skrypt PHP i doszedłem do takiej postaci:
Tabela z kursami wyświetla się, zmiany procentowe są naliczane tak, jak należy, ale... Jest problem - dla nowego kursu jest przypisana ta sama wartość (ostatnia wartość z tablicy, czyli 0.12). Czy wrzucenie zapytania $query do pętli foreach jest jedynym rozw.? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Bo $amount_today to nie tablica.
Cytat(DreamCatcher) Czy wrzucenie zapytania $query do pętli foreach jest jedynym rozw.? Nie jest to żadne rozwiązanie, a tylko bardziej możesz skopać skrypt. Moja propozycja:
EDIT Gdyby np. pola w tabeli w bazie danych miały angielskie nazwy, to fajnie można by było użyć funkcji array_merge(). Choć w sumie nadal można. Ten post edytował mortus 28.05.2011, 07:57:27 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 10:27 |