17

现在我有一个小型数据库,其中有两个表,如下所示:

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

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

status_id 设置为状态表中 id 的外键约束。我的查询看起来像这样:

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

当我显示$row['status_id']它的输出2但我希望它显示Approved为时,实现此目的的最佳方法是什么?

4

5 回答 5

28
SELECT u.*, s.*
FROM users u
    inner join statuses s on u.status_id = s.id
WHERE u.status_id = 2
于 2012-09-18T18:51:55.270 回答
6

你需要的是这个

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

然后你可以参考

$row['value'];
于 2012-09-18T18:52:20.700 回答
3

最简单的方法是通过连接:

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

(如果您根本不需要 status-id,您可以在 select-clause 中指定您想要的列。)

于 2012-09-18T18:49:39.607 回答
0

您的用户表中没有已批准的值。它在您的状态表中。当您请求 status_id 时,您将从该查询中获取该值。我认为你必须做一个JOIN ON status_id才能完成这项工作。或者进行第二次查询。

于 2012-09-18T18:50:01.290 回答
0

你不是在这里加入:

SELECT *
FROM Users U, Statuses S
WHERE S.id=U.status_ID
AND status_id = 2;
于 2012-09-18T18:51:12.263 回答