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
Tomal40
post
Post #2





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:

  1. SELECT waluta.id AS LP,nazwa, waluta.kod AS kod, wartosc.kurs AS kurs, wartosc.DATA AS dataa, wartoscnowa.nowykurs AS nowykurs, wartoscnowa.aktualnadata AS aktualnadata
  2. FROM wartosc, waluta, wartoscnowa
  3. WHERE waluta.id = wartosc.id AND wartosc.walutaid = wartoscnowa.walutaid;


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:
  1. <?php
  2. require_once('c:\xampp\security\mysqli_connects.php');
  3.  
  4. $q = "SELECT waluta.id AS LP,nazwa, waluta.kod AS kod, wartosc.kurs AS kurs, wartosc.data AS dataa, wartoscnowa.nowykurs AS nowykurs, wartoscnowa.aktualnadata AS aktualnadata
  5. FROM wartosc, waluta, wartoscnowa
  6. WHERE waluta.id = wartosc.id and wartosc.walutaid = wartoscnowa.walutaid";
  7. $r = @mysqli_query ($dbc, $q);
  8. $num = mysqli_num_rows($r);
  9.  
  10. echo '<table align="center" cellspacing="3" cellpadding="3" width="75%">
  11. <tr>
  12. <td align="left"><b>LP</b></td>
  13. <td align="left"><b>Nazwa</b></td>
  14. <td align="left"><b>Kod</b></td>
  15. <td align="left"><b>Kurs</b></td>
  16. <td align="left"><b>Data</b></td>
  17. <td align="left"><b>Nowykurs</b></td>
  18. <td align="left"><b>AktualnaData</b>
  19. <td align="left"><b>Zmiana procentowa</td>
  20. </tr>
  21. ';
  22.  
  23.  
  24.  
  25. while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
  26. $a=0.00;
  27. $b=0.00;
  28. $a=$row['kurs'];
  29. $b=$row['nowykurs'];
  30. $d=number_format((1-($a/$b))*100, 2);
  31.  
  32. echo '<tr>
  33. <td align = "left">' . $row['LP'] . '</td>
  34. <td align = "left">' . $row['nazwa'] . '</td>
  35. <td align = "left">' . $row['kod'] . '</td>
  36. <td align = "left">' . $row['kurs'] . '</td>
  37. <td align = "left">' . $row['dataa'] . '</td>
  38. <td align = "left">' . $row['nowykurs'] . '</td>
  39. <td align = "left">' . $row['aktualnadata'] . '</td>
  40. <td align = "left">'. $d .'%'. '</td>
  41.  
  42. </tr>';
  43.  
  44. }
  45. echo'</table>';
  46.  
  47. mysqli_free_result($r);
  48.  
  49. mysqli_close($dbc);
  50.  
  51. ?>


Wynik:

(IMG:http://img821.imageshack.us/img821/4482/waluta.th.jpg)

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: 5.10.2025 - 17:55