0

ユーザーがアップロードしたファイルを削除できるようにするサイト用のAPIを構築しています。明らかに、APIを介してファイルを削除する前に、ユーザーがそのファイルを所有しているかどうかを確認したいと思います。

ファイルテーブルとユーザーテーブルがあります。スキーマは次のとおりです。

f_id, s_id, u_id, name, size, uploaded

u_id, username, password, email, activated, activation_code

u_id外部キーです。filesテーブルのフィールドは、usersテーブルu_idのを指します。u_id

ユーザーのユーザー名を指定して、ユーザーを検索しu_id、ファイルID(f_id)を使用してユーザーがファイルを所有しているかどうかを確認します。

私はこのSQLを書きました:

$sql = 'SELECT u.username
        FROM `users` u
        JOIN `files` f
        ON u.u_id = f.u_id
        WHERE f_id = ? AND u.u_id = ?
        LIMIT 1';

u_idAPIリクエストでユーザーが指定されていれば機能すると思いますが、残念ながらユーザー名のみが指定されています。

そのSQLを変更してユーザーIDを見つけ、それを使用するにはどうすればよいですか?

ありがとう。

編集:申し分なく私はこのクエリを持っていますが、ファイルIDとユーザー名の両方が存在していても、常に空の結果セットを返します。

SELECT u.username
FROM `users` u
JOIN `files` f
ON u.u_id = f.u_id
WHERE f.f_id = ? AND u.username = ?
LIMIT 1
4

1 に答える 1

0

これを試してください:

SELECT f.name
FROM `users` AS u
INNER JOIN `files` AS f ON f.u_id = u.u_id AND f.f_id = ?
WHERE u.username = ?
LIMIT 1

この場合、内部結合の方が適切だと思います(左結合よりも少し速いかもしれません)

于 2012-06-16T21:12:07.580 に答える