2012-09-18 41 views
13

Ngay bây giờ tôi có một cơ sở dữ liệu nhỏ với hai bảng đó giống như thế này:Tôi làm cách nào để truy vấn bằng cách sử dụng khóa ngoài trong MySQL?

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

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

status_id được thiết lập như một ràng buộc khoá ngoại để id từ bảng trạng thái. truy vấn của tôi trông giống như sau:

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

Khi tôi hiển thị $row['status_id'] nó ra 2 nhưng tôi muốn nó hiển thị như Approved thay vào đó, cách tốt nhất để thực hiện điều này là gì?

+0

http: // stackoverflow.com/questions/260441/how-to-create-relationships-in-mys ql .... Tuy nhiên, các khóa ngoại chỉ được hỗ trợ trên InnoDB, bạn không thể làm điều đó trong MyIsam. –

+0

@MiroMarkarian mối quan hệ được thiết lập đúng và đó là InnoDB, tôi chỉ không hiểu làm thế nào để sử dụng 'JOIN' đúng cách nhưng nó đã được trả lời dưới đây. –

Trả lời

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

+1 để trả lời câu hỏi và sử dụng cú pháp JOIN tuân thủ ANSI. – Aaron

+0

Tôi đã thử sử dụng này làm truy vấn của mình, nhưng khi tôi lặp lại '$ row ['status_id']' nó vẫn xuất ra '2' –

+0

@Riboflavin Đó là vì bạn đang yêu cầu status_id, hãy nhìn vào câu trả lời của tôi. Bạn cần phải yêu cầu 'giá trị' nếu đó thực sự là tên của cột trong bảng trạng thái. – thatidiotguy

2

Cách đơn giản nhất sẽ được thông qua tham gia:

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

(nếu bạn không muốn tình trạng-id ở tất cả, bạn có thể chỉ định các cột mà bạn muốn trong select-khoản.)

0

Bảng người dùng của bạn không có giá trị được chấp thuận trong đó. Nó nằm trong bảng trạng thái của bạn. Khi bạn yêu cầu status_id, bạn sẽ lấy lại giá trị đó từ truy vấn đó. Bạn phải làm JOIN ON status_id để thực hiện công việc này tôi nghĩ. Hoặc thực hiện truy vấn thứ hai.

0

You are not JOIN ing ở đây:

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

gì bạn cần là này

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

và sau đó bạn có thể tham khảo

$row['value']; 
Các vấn đề liên quan