Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Łączenie wyników w jednej tabeli
-DreamCatcher-
post
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:
  1. 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:
  1. 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), 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 to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
-DreamCatcher-
post
Post #2





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:

  1. foreach ($aAmount_today as $v) {
  2. $amount_today = $v['amount'];
  3. var_dump($amount_today); // "2.91", "3.85", "3.19", "4.47", "0.12"
  4. }


  1. $query =
  2. "SELECT waluta.ID, NAZWA, KOD, wartosc.KURS AS KURS, wartosc.DATA AS DATA, $amount_today AS NOWY_KURS
  3. FROM waluta
  4. LEFT JOIN wartosc
  5. ON waluta.ID = wartosc.WALUTA_ID
  6. ORDER BY DATA DESC
  7. LIMIT 0,5";


  1. <?php
  2. if ($k['KURS'] > $k['NOWY_KURS']) $nowy_kurs = number_format(1-($k['KURS']/$k['NOWY_KURS']),2);
  3. elseif ($k['KURS'] < $k['NOWY_KURS']) $nowy_kurs = number_format($k['KURS']*100/$k['NOWY_KURS'],2);
  4. ?>
  5. <tr>
  6. <td><?php echo $k['ID']; ?></td>
  7. <td><?php echo $k['NAZWA']; ?></td>
  8. <td><?php echo $k['KOD']; ?></td>
  9. <td><?php echo $k['KURS']; ?></td>
  10. <td><?php echo $k['DATA']; ?></td>
  11. <td><?php echo $k['NOWY_KURS']; ?></td>
  12. <td><?php echo date('Y-m-d'); ?></td>
  13. <td><?php echo $nowy_kurs.' %'; ?></td>
  14. </tr>


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.?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 21:30