2011-10-22 51 views
0

我有棘手SQL查詢創建,如果可能將節省我很多PHP代碼。MySQL:插入和選擇相同的查詢

所以我有一個HTML表單,訪問者可以創建一個域用戶帳戶電子郵件密碼利益

對於電子郵件密碼我有一個簡單INSERT查詢進入這個信息到數據庫users,但是利益領域可以有多個條目,以便該數據被存儲在多對一(interests,user_interests)。

爲了讓我在表中輸入這些利益user_interests,我需要獲得這是自動增加,從最初的INSERT查詢加環比另一個INSERT每個「興趣」用戶選擇的用戶ID號。我可以在一個SQL查詢中完成這一切嗎?

+0

你將不得不使用2個查詢或交易。 'LAST_INSERT_ID()'會很有用:http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_last-insert-id –

+1

可能是的,使用INSERT INTO(cols。 )選擇列。 。 。 FROM。 。 。但是當你想執行這個SQL時,你需要說明哪些表中有什麼信息。 –

回答

1

那麼,在MySQL中,INSERT語句只能插入到一個表中。所以不,用一個查詢來完成這一點是不可能的。但你可以用兩個查詢來完成。 MySQL支持一種語法,您可以使用單個查詢插入多行:

insert into user_interests (user_id, interest_id) values (1,1), (1,2), (1,3) 

P.S.我確實理解,興趣是一個分類器,並且在interests表中添加新行超出了這個問題的範圍,對吧?

+0

Oracle有一種方法可以通過一個INSERT插入到多個表中:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9014.htm#i2125362 –

+0

啊,那麼,我回我的話。 :P –

+0

這是正確的,興趣表是用戶可以選擇的一組選項。 – Dan

1

如果你想用一個命令來做到這一點,那麼這聽起來像是一個很好的例子來學習如何編寫MySql存儲過程。結果也會快得多。

http://dev.mysql.com/doc/refman/5.0/en/stored-routines-last-insert-id.html

http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-compound-statements.html

+0

你打算如何將ID列表傳遞給存儲過程?也許我錯過了一些東西,但我在MySQL手冊中找不到任何類似數組的數據類型。 –

+0

我會將它作爲逗號分隔列表傳遞,然後解析出數據並構建一個包含多行的單個插入語句。絕對有MySql函數可以輕鬆做到這一點。學習如何編寫SP是編程中最有價值的技能之一,因爲它們在所有語言中都是通用的(你只需要用參數調用它們) – Len

+0

更多提示:http://dev.mysql.com/doc/refman/5.0/ en/loop-statement.html http://forums.mysql.com/read.php?98,235478,235683#msg-235683 – Len