2012-06-16 165 views
0

我正在爲我的網站構建一個API,允許用戶刪除它們上傳的文件。顯然,我想在用戶通過API刪除之前檢查用戶是否擁有該文件。檢查用戶在刪除文件之前是否擁有文件

我有一個文件表和用戶表,這裏的模式:

f_id, s_id, u_id, name, size, uploaded 

u_id, username, password, email, activated, activation_code 

u_id是一個外鍵。 files表中的u_id字段指向users表中的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'; 

我假設,如果我被賦予了API請求的用戶u_id那會工作,但很可惜,我只給他們的用戶名。

如何修改該SQL以查找其用戶標識並使用該標識?

謝謝。

編輯:好的我有這個查詢,但它總是返回一個空的結果集,即使文件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 
+0

看不出是什麼將無法工作。你確定f.u_id設置正確嗎?我的意思是它屬於你有傳遞用戶名的行嗎? – Ignas

+0

是的,它:) :) –

回答

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 

我認爲內部聯接是在這種情況下,更合適的(可能會略快於左連接以及)

+0

我得到這個錯誤與該查詢:'#1054 - 未知列'u.f_id'在'子句'' –

+0

對不起,我編輯了我的答案。 – Ignas

+0

哦,並且確保你傳遞的值與查詢中的順序相同。例如f.f_id =? u.username =?應該是數組(123,'admin') – Ignas

相關問題