2012-09-18 11 views
13

Teraz mam małą bazę danych z dwóch tabel, które wyglądają mniej więcej tak:Jak mogę wykonać zapytanie za pomocą klucza obcego w MySQL?

users table 
    ==================== 
    id name status_id 
    1 Bobby 3 
    2 James 2 

i

statuses table 
    ============= 
    id value 
    1 Waiting 
    2 Approved 
    3 Other 

status_id jest ustawiony jako klucz obcy do id z tabeli statusy. Moje zapytanie wygląda mniej więcej tak:

SELECT * 
FROM `users` 
WHERE `status_id` = 2"; 

Kiedy wyświetli $row['status_id'] wyprowadza 2 ale chciałbym go wyświetlać jako Approved Zamiast tego, co jest najlepszym sposobem do osiągnięcia tego celu?

+0

http: // stackoverflow.com/questions/260441/how-to-create-relationships-in-mys ql .... Jednak obce klucze są obsługiwane tylko w InnoDB, nie możesz tego zrobić w MyIsam. –

+0

@MiroMarkarian związek jest ustawiony prawidłowo i jest to InnoDB, po prostu nie rozumiem, jak poprawnie używać 'JOIN', ale odpowiedź została udzielona poniżej. –

Odpowiedz

19
SELECT u.*, s.* 
FROM users u 
    inner join statuses s on u.status_id = s.id 
WHERE u.status_id = 2 
+0

+1 za udzielenie odpowiedzi na pytanie i użycie składni JOIN zgodnej z ANSI. – Aaron

+0

Próbowałem używać tego jako moje kwerendy, ale gdy echo '$ row ['status_id']' nadal wysyła '2' –

+0

@Riboflavin To dlatego, że prosi o status_id, spójrz na moją odpowiedź. Musisz zapytać o "wartość", jeśli rzeczywiście jest to nazwa kolumny w tabeli statusów. – thatidiotguy

2

Najprostszym sposobem byłoby poprzez przyłącza:

select * 
from User u join Status s on u.status_id = s.id; 

(jeśli nie chcesz status-id w ogóle, można określić kolumny, które chcą w select-klauzuli.)

0

Tabela użytkowników nie ma zatwierdzonej wartości. Jest w twojej tabeli statusów. Gdy zażądasz status_id, otrzymasz tę wartość z powrotem z tego zapytania. Musisz zrobić JOIN ON status_id, żeby to się udało. Lub wykonaj drugie zapytanie.

0

Nie JOIN są ing tutaj:

SELECT * 
FROM Users U, Statuses S 
WHERE S.id=U.status_ID 
AND status_id = 2; 
5

Co trzeba jest to

SELECT * 
FROM `users` 
JOIN statuses ON statuses.id = users.status_id 
WHERE `status_id` = 2"; 

a następnie można odnieść do

$row['value']; 
Powiązane problemy