pobranie ostatniej wartości z bazy danych

Odpowiedz Nowy wątek
2011-07-31 22:02
0

Siedzialem nad tym problemem caly dzień i nic nie wymyslilem...

Daną mam wartość zmiennej user

Oraz dwie tabele:
zrodlo1:
-id
-user
-player_id
-status

zrodlo2:
-id
-nazwa_gracza
-player_id

Teraz muszę z bazy zrodlo1 pobrać wszystkie wiersze w których w ktorych user ma określoną wartość i status = 1;
Z otrzymanych wyników wykorzystuję player_id do wyszukania nazwy_gracza z drugiej tabeli żródo2

Problem w tym, ze w tabeli zródlo2 istnieją wiersze np:
id|nazwa_gracza|player_id
1|nazwa1|player123
2|nazwa2|player123

A ja potrzebuje pobrać ostatnią nazwę gracza dla określonego player_id (w tym przypadku nazwa2).

Udalo mi się wykombinować coś takiego ale poniższe zapytanie zwraca mi pierwszą znalezioną wartość nazwa_gracza a nie ostatnią jak potrzebuje.

SELECT nazwa_gracza, player_id FROM $zrodlo2 WHERE player_id IN
(SELECT DISTINCT player_id FROM $zrodlo1 WHERE user='$login' AND status='1') GROUP BY player_id

Jeśli ktoś zrozumial coś z mojego opisu to proszę o pomoc. Do tej pory robilem to za pomocą dwóch zapytań i pętli ale na pewno można to rozwiązać inaczej. Tylko jak?

Pozostało 580 znaków

2011-07-31 22:06
0

Nie wiem czy dobrze zrozumiałem ale jeśli chodzi o pobranie bazy tak jakby od końca to wystarczy do zapytania dodać DESC...


Informatyk - ktoś kto naprawi problem, o którym nie wiedziałeś w sposób, którego nie rozumiesz.
edytowany 1x, ostatnio: Dyspenser, 2011-07-31 22:07

Pozostało 580 znaków

2011-07-31 22:14
0

po dodaniu DESC na końcu tylko mi posortowalo wyniki ale dalej zapytanie zwraca nazwa1 a nie jak chce nazwa2 (czyli pierwszą znalezioną wartosc)

Dopiero się uczę MYSQL wiec nie zdziwilbym się jakby moje zapytanie mialo jakiś poważny bląd i dlatego nie dziala jak powinno...
Może ktoś by to napisal calkiem inaczej?

Aby jeszcze rozjaśnić sytuację czego potrzebuje:
Wcześniej rozwiązalem to w ten sposób że najpierw za pomocą zapytania:

*"SELECT DISTINCT FROM $zrodlo1 WHERE user='$login' AND status='1'"**

wyciągalem wszystkie interesujące wiersze z pierwszej tabeli (zawieraly kolumnę player_id)

Potem w pętli z każdego wiersza wyniku wyciągalem player_id i za pomoca zapytania

"SELECT nazwa_gracza FROM $zrodlo2 WHERE player_id='$wynik_player_id' ORDER BY id DESC LIMIT 1";

z drugiej tablizy wyciągem ostatnią wartosc nazwa_gracza.

Ale coś mi sie zdaje, że to można zrobić za pomocą jednego zapytania... Tylko nie moge rozszyfrować jak...

edytowany 3x, ostatnio: xazax24, 2011-07-31 22:31

Pozostało 580 znaków

2011-07-31 22:48
0
SELECT z2.* FROM $zrodlo1 z1 JOIN $zrodlo2 z2 ON z1.player_id=z2.player_id WHERE z1.USER='$login' AND z1.STATUS='1'  ORDER BY z2.id DESC LIMIT 1

Pozostało 580 znaków

2011-07-31 23:48
0

Dzięki Marcin za gotowca!

Dziala ale... jeszcze cos sprawdze...

No wlaśnie... Wyświetla tylko jedną ostatnią wartość a mi chodzilo żeby zwrócilo cala tablice tablice zawierającą ostatnie dane"nazwa_gracza" dla każdego player_id z pierwszej tablicy.

Ale już mam pole do dalszego kombinowania. Może jakoś uda mi się przerobic te zapytanie;)

edytowany 5x, ostatnio: xazax24, 2011-08-01 00:14

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0