![]() |
![]() |
![]()
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:
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ę:
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ą:
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Może lepszym rozwiązaniem będzie złączenie:
Chyba jakoś tak, choć dzisiaj nie mam najlepszego myślenia. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 14 Dołączył: 14.07.2011 Skąd: Gliwice / Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Raczej tak, złączenie będzie dobrym pomysłem. Jednak Twoje zapytanie działa nie do końca - zwraca wszystkie rekordy z tabeli `mecze` (także te, w których zalogowany gracz wcale nie grał), drugi problem jest taki, że nie jest wyświetlany przeciwnik. Dokładniej wygląda to tak:
Kod gracz1 | wynik_gracz1 | wynik_gracz2 | gracz2 3 0 3 2 Ewa Szańska 3 0 2 1 Ewa Szańska W tabeli `mecze` mam łącznie 4 rekordy. Zakładamy, że Ewa Szańska jest zalogowana. W pierwszych meczach nie grała, a zostały wyświetlone (bez nazwisk). No i tam, gdzie grała, nazwisk rywali tównież nie ma... EDIT: w pierwszym poście zrobiłem lieterówkę - podałem, że w tabeli `mecze` są pola `zawodnik1` i `zawodnik2` - tak nie jest, te pola nazywają się `gracz1` i `gracz2`. Ten post edytował jg44 27.12.2011, 13:10:49 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Jak patrzę na to zapytanie, to nie dziwię się, że zwraca nie to co trzeba. Poprawione:
zawodnik1 i zawodnik2 w powyższym zapytaniu, to aliasy dla pierwszej i drugiej nazwy użytkownika, a nie kolumny z tabeli mecze. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Problem leży w zapytaniu, właściwe byłoby
Postaraj się też dokładnie podawać strukturę tabel, zgaduję jedynie że w tabeli mecze są jeszcze kolumny wynik1 i wynik2 i być może jakieś inne, które na pozór mogą być nieistotne dla tego problemu, ale przykładowo jeśli nie zapisujesz daty meczu i nie chcesz po niej sortować to mógłbyś uniknąć używania OR i mieć dwa prostsze i sumarycznie dużo szybsze zapytania z podanym użytkownikiem najpierw na pierwszym a potem drugim miejscu. Nie czepiam się, po prostu precyzyjne dane oszczędzają sporo czasu i myślenia komuś, kto chce odpowiedzieć. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 122 Pomógł: 14 Dołączył: 14.07.2011 Skąd: Gliwice / Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Super, bardzo Ci dziękuję mortus! (IMG:style_emoticons/default/smile.gif)
pmir13, masz rację, chciałem się wysłowić, żeby wszystko było w miarę jasne i niedokładnie podałem strukturę tabeli. Odgadłeś precyzyjnie, istnieją jeszcze kolumny `wynik_gracz1` oraz `wynik_gracz2`. Niemniej problem został rozwiązany. (IMG:style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 26.09.2025 - 01:34 |