2011-08-20 26 views
0
INSERT INTO `images` (s_id, u_id, name, filename, filesize, uploaded) 
SELECT s_id, ?, ?, ?, ?, ? 
FROM servers 
WHERE name = ? 

我正在使用此SQL語句,當用戶將圖像上載到我的網站時。 s_id字段是servers表的外鍵,而u_id字段是users表的外鍵。我想通過用戶名(始終唯一)從users表中選擇用戶標識(u_id),並在此插入語句中使用它。插入行時選擇第二個外鍵

我已經完成了選擇服務器ID(s_id)的那部分,但是這非常僥倖和混亂。我不太清楚如何使這個查詢有兩個select語句?

幫助表示感謝,謝謝!

回答

0

嘗試:

DECLARE userID int 
SELECT u_id FROM users into userID 
WHERE useranem = ? 

然後使用用戶標識變量在INSERT之後。我是一個SQL Server用戶,而不是MySQL,但是從我閱讀的內容來看,我認爲我的語法正確。

0
INSERT INTO `images` (s_id, u_id, name, filename, filesize, uploaded) 
SELECT (select s_id from servers where name=?') as s_id, 
(select user_id from users where username=?) as user_id, 
?, ?, ?, ?; 
+0

從我可以告訴,其他???也出來的服務器,所以OP將需要這些值,你最終會有很多子查詢。 –

+0

你在哪裏存儲名稱,文件名,文件大小,上傳? –

0

我喜歡這樣的東西,這樣你就可以得到兩個獨特的索引掃描,這就是它的結尾;只要這些表格在唯一鍵和希望返回的值上都有唯一索引。

insert into 'images' (s_id, u_id, name, filename, filesize, uploaded) 
select (select s_id 
      from servers 
      where name = ?) 
    , (select u_id 
      from users 
      where username = ?) 
    , 'name' 
    , 'filename' 
    , 'filesize' 
    , 'uploaded' 
    from dual; 
0

我不知道爲什麼沒有人提到

INSERT INTO `images` (s_id, u_id, name, filename, filesize, uploaded) 
SELECT s_id, u_id, ?, ?, ?, ? 
FROM servers JOIN users 
WHERE name = ? AND username = ? 

這是無條件加入,但它仍然應該產生只有一行,與給定服務器和用戶。

+0

工作一個款待,其他方法似乎有點複雜。謝謝! :) – John

相關問題