2012-04-19 24 views
5

Mam 2 tabele: użytkownicy saldo &.MySQL - Dołącz do 2 tabel

Chcę dołączyć do tabel ze wszystkimi szczegółami z tabeli użytkownika (wszystkie pola wszystkich krotek) z najnowszym wpisem z tabeli bilansu (1 pole połączone przez identyfikator użytkownika).

Oto struktura tabel:

balans:

+---------+ 
| Field | 
+---------+ 
| dbid | 
| userId | 
| date | 
| balance | 
+---------+ 

użytkownicy:

+-------------+ 
| Field  | 
+-------------+ 
| dbid  | 
| id   | 
| fName  | 
| sName  | 
| schedName | 
| flexiLeave | 
| clockStatus | 
+-------------+ 

staram godzinami to zrobić i najbliżej można uzyskać jest aby zwrócić wiersz dla pojedynczego użytkownika:

SELECT u.*, b.balance, b.date FROM users u, balance b WHERE u.id = b.userId AND b.date = (SELECT MAX(date) FROM balance WHERE userId = 'A8126982'); 

Albo mogę wybrać wszystkich użytkowników, ale nie ostatnia pozycja w tabeli bilansowej:

SELECT u.*, b.balance, b.date FROM users u, balance b WHERE u.id = b.userId GROUP BY u.id; 

Próbowałem wielu różnych zapytań i wydają się być coraz bliżej, ale po prostu nie mogę dostać się tam, gdzie chcę być.

Każda pomoc zostanie doceniona.

+0

jaki jest wynik działania pierwszego zapytania? –

Odpowiedz

18

Można użyć pierwszego SQL napisałeś, ale dla wszystkich użytkowników:

SELECT u.*, b.balance, b.date 
FROM users u JOIN balance b ON u.id = b.userId 
WHERE b.date = (SELECT MAX(date) FROM balance WHERE userId = u.id); 

To nie może być najszybszy sposób, aby uzyskać wynik, ale to daje ci to, czego potrzebujesz. Używam podobnych zapytań w kilku miejscach w mojej aplikacji.

+0

Dziękuję, to dostaje wyniki, których potrzebuję. – SteveJDB