2012-09-18 34 views
13

Ahora mismo tengo una pequeña base de datos con dos tablas que ser algo como esto:¿Cómo puedo consultar utilizando una clave externa en MySQL?

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

y

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

status_id se configura como una restricción de clave externa para identificación de la tabla de estados. Mi consulta es como la siguiente:

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

Cuando veo imágenes que $row['status_id'] salidas 2 pero me gustaría que se muestre como Approved lugar, ¿cuál es la mejor manera de lograr esto?

+0

http: // stackoverflow.com/questions/260441/how-to-create-relationships-in-mys ql ... Sin embargo, las claves externas solo son compatibles con InnoDB, no puedes hacer eso en MyIsam. –

+0

@MiroMarkarian la relación está configurada correctamente y es InnoDB, simplemente no entendí cómo usar 'JOIN' correctamente, pero se respondió a continuación. –

Respuesta

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

+1 para responder la pregunta y para utilizar la sintaxis JOIN compatible con ANSI. – Aaron

+0

Intenté usar esto como mi consulta, pero cuando echo '$ row ['status_id']' todavía sale '2' –

+0

@Riboflavin Eso es porque estás pidiendo status_id, mira mi respuesta. Debe solicitar 'valor' si ese es realmente el nombre de la columna en la tabla de estados. – thatidiotguy

2

La forma más fácil sería a través de une:

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

(si no desea que el estado-id en absoluto, puede especificar las columnas que usted desee en la cláusula-select.)

0

Su tabla de usuarios no tiene el valor de aprobado en ella. Está en tu tabla de estados. Cuando solicite status_id, obtendrá ese valor de esa consulta. Tienes que hacer un JOIN ON status_id para que esto funcione, creo. O haz una segunda consulta.

0

No JOIN está Ing aquí:

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

Lo que se necesita es este

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

y luego se puede hacer referencia a

$row['value']; 
Cuestiones relacionadas