現在、次のような2つのテーブルを持つ小さなデータベースがあります。
users table
====================
id name status_id
1 Bobby 3
2 James 2
そして
statuses table
=============
id value
1 Waiting
2 Approved
3 Other
status_idは、statusesテーブルからのidへの外部キー制約として設定されます。私のクエリは次のようになります:
SELECT *
FROM `users`
WHERE `status_id` = 2";
$row['status_id']
を表示すると2
が出力されますが、代わりにApproved
として表示したいのですが、これを行うための最良の方法は何ですか。
SELECT u.*, s.*
FROM users u
inner join statuses s on u.status_id = s.id
WHERE u.status_id = 2
あなたが必要なのはこれです
SELECT *
FROM `users`
JOIN statuses ON statuses.id = users.status_id
WHERE `status_id` = 2";
そして、あなたは参照することができます
$row['value'];
最も簡単な方法は、結合を使用することです。
select *
from User u join Status s on u.status_id = s.id;
(status-idがまったく必要ない場合は、select-clauseで必要な列を指定できます。)
ユーザーテーブルに承認済みの値がありません。ステータステーブルにあります。 status_idをリクエストすると、そのクエリからその値が返されます。 JOIN ON status_id
これがうまくいくと思います。または、2番目のクエリを実行します。
あなたは [〜#〜] join [〜#〜] していない:
SELECT *
FROM Users U, Statuses S
WHERE S.id=U.status_ID
AND status_id = 2;