Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wybranie danych z dwóch tabel
jg44
post 27.12.2011, 11:10:51
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 14
Dołączył: 14.07.2011
Skąd: Gliwice / Wrocław

Ostrzeżenie: (0%)
-----


Witam,
mam dwie następujące tabele: `uzytkownicy`(`ID`,`nazwa_uzytkownika`) oraz `mecze`(`gracz1`,`gracz2`).
Powiązane są kluczami obcymi:
  1. FOREIGN KEY(`gracz1`) REFERENCES `uzytkownicy`(`ID`),
  2. FOREIGN KEY(`gracz2`) REFERENCES `uzytkownicy`(`ID`)

W tabeli `mecze` w kolumnach `gracz1` oraz `gracz2` przechowywane są ID zawodników. Problem polega na tym, że chcę wybrać wszystkie mecze zalogowanego użytkownika (czyli takie rekordy, gdzie zalogowany użytkownik jest zapisany w polu `gracz1` lub `gracz2`). Znane jest zarówno ID tego zalogowanego użytkownika (pod zmienną $this->id) jak i nazwa (zmienna $this->user_name).
Próbowałem w taki sposób, jednak to bardzo źle działa, bo co prawda wyświetla mecze zalogowanego użytkownika, ale wszędzie wrzuca jego nazwę:
  1. function printGames()
  2. {
  3. $r = mysql_query("SELECT * FROM mecze,uzytkownicy
  4. WHERE mecze.gracz1 = uzytkownicy.ID AND mecze.gracz1='$this->id' OR mecze.gracz2 = uzytkownicy.ID AND mecze.gracz2='$this->id'")or die(mysql_error());
  5. if(mysql_num_rows($r) != 0)
  6. {
  7. echo "<table>";
  8. echo "<tr><td><strong>Zawodnik 1</strong></td>
  9. <td><strong>Wynik zawodnika 1</strong></td>
  10. <td></td>
  11. <td><strong>Wynik zawodnika 2</strong></td>
  12. <td><strong>Zawodnik 2</strong></td>
  13. <td><strong>Mecz rozegrano</strong></td></tr>";
  14. while($l = mysql_fetch_array($r))
  15. {
  16. echo "<tr><td>" .$l['nazwa_uzytkownika']. "</td>";
  17. echo "<td><center>" .$l['wynik_gracz1']. "</center></td>";
  18. echo "<td><center>" .$l['wynik_gracz2']. "</center></td>";
  19. echo "<td>" .$l['nazwa_uzytkownika']. "</td>";
  20. }
  21. echo "</table>";
  22. }
  23. else
  24. {
  25. echo "<h5 class=\"correct\">Nie rozegrałeś(-aś) jeszcze żadnego meczu.</h5>";
  26. }
  27. }

Przykładowo, załóżmy, że zalogownym użytkownikiem jest Ewa Szańska. Powyższy fragment powinien zwrócić tabelę wynikową:
Kod
zawodnik1          | wynik_zawodnik1 | wynik_zawodnik2 | zawodnik2
Ewa Szańska                        3   0                 Jurek KIler
Stefan Siarzewski                  3   2                 Ewa Szańska

a zamiast tego zwraca:
Kod
zawodnik1          | wynik_zawodnik1 | wynik_zawodnik2 | zawodnik2
Ewa Szańska                        3   0                 Ewa Szańska
Ewa Szańska                        3   2                 Ewa Szańska


Błąd prawdopodobnie leży w linii 19 metody drukującej dane (jak widać dwa razy drukuję $l['nazwa_uzytkownika'] i dlatego nadpisuje mi pozostałe nazwiska). Jak sobie z tym poradzić?
____________________________________________
Albo inaczej:
jeśli zmodyfikuję pętlę wybierającą na następującą:
  1. while($l = mysql_fetch_array($r))
  2. {
  3. echo "<tr><td>" .$l['gracz1']. "</td>";
  4. echo "<td><center>" .$l['wynik_gracz1']. "</center></td>";
  5. echo "<td><center>" .$l['wynik_gracz2']. "</center></td>";
  6. echo "<td>" .$l['gracz2']. "</td>";
  7. }

to działa dobrze, ale zamiast nazwy użytkownika drukuje jego ID. Jak zrobić, aby zamiast ID drukowana była nazwa użytkownika?
Z góry dziękuję za pomoc.

Ten post edytował jg44 27.12.2011, 11:34:23
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:28