2012-07-11 60 views
0

我有兩個表格:imagesservers。下面是關於這兩個表的模式:MySQL插入數據時加入

id, name, uploaded, views, server_id

id, name, description, drive_space, enabled

images表,server_id是一個外鍵id字段中servers表。很簡單的東西。許多圖像屬於一臺服務器。

當我插入圖像時,它有一個指向圖像託管的服務器的密鑰。當我插入行時,我給了服務器的名稱(不是它的id),所以我不能只是插入它。我可以用兩個查詢來實現我想要的(一個用於獲取服務器ID,另一個用於將圖像插入到數據庫中),但理想情況下,我希望使用JOIN在一個查詢中完成它,因爲這是最佳實踐。

對於SELECT語句,JOINS幾乎無能爲力,而對INSERT則更是如此。誰能幫我嗎?

+0

只需單擊[這裏](http://bradmontgomery.blogspot.com/2009/04/how-to-set-up-foreign-key- constraint-in.html)它將幫助您理解外鍵概念... – Rush 2012-07-11 20:21:47

回答

2

不需要加入。只需使用INSERT ... SELECT ...:

INSERT INTO images 
(name, uploaded, views, server_id) 
SELECT 'imagename', CURTIME(), 0, id 
FROM servers 
WHERE name = 'servername' 
+0

+1。這是要走的路。但是,如果我們不能保證「servers.name」列的唯一性,我們可以添加一個「LIMIT 1」來避免插入添加多於一行。此外,有可能找不到servername的值,所以應用程序需要檢查'rows_affected> 0',並在不是時假定行已成功插入,則處理該情況。 – spencer7593 2012-07-11 20:31:25