2012-07-28 111 views
1

我想知道是否有可能通過所有的行與生成的ID執行一個SQL查詢,然後更新另一個表,並繼續?多個MySQL查詢(無PHP)

我有這樣的SQL查詢的作品,但我需要做的是每一行被添加到卡後,使它們與隨後與最後生成的ID更新merged.cars_id。通常我會用PHP來做這件事,但理想情況下,我希望只要可能就用MySQL來做。

主查詢

INSERT INTO cards (first_contact_date, card_type, property_id, user_id) 
SELECT first_contact_date, 'P', property_id, user_id FROM merged 

然後,我匹配的行NEED(大約)

UPDATE merged SET merged.card_id = LAST_INSERT_ID (FROM ABOVE) into the matching record.. 

是這樣的可能?我怎麼辦呢?

回答

2

我會建議使用MySQL的觸發器來做到這一點 http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

觸發器是將後或在INSERT之前被執行或刪除或更新是在你的表中的任何記錄所完成的功能。

你的情況,你需要做一個INSERT後剛剛更新合併表。確保它的AFTER插入,因爲否則你將無法訪問新行的ID。

的代碼會是這個樣子,從卡表假設id字段爲其取名爲「ID」

delimiter | 

CREATE TRIGGER updating_merged AFTER INSERT ON cards 
    FOR EACH ROW BEGIN 
    UPDATE merged SET card_id = NEW.id; 
    END; 
| 
delimiter ; 
+0

謝謝,我只是想試試如何寫這個。我有這樣的時刻,但我在哪裏把原來插入SQL行: CREATE TRIGGER'after_insert_cards' INSERT後'cards' FOR EACH ROW BEGIN INSERT INTO合併(card_id的)VALUES(NEW.card_id); END – sluggerdog 2012-07-28 01:25:30

+0

一個觸發器是當你插入(在這種情況下)的新行上表,將永遠被觸發的函數,觸發器是怎麼樣的表的架構的一部分,所以一旦你創建你不需要再次擔心它,只是繼續插入行,並且每次由MySQL調用觸發器funcion。 – Jimmy 2012-07-28 01:32:43

+0

好,謝謝,我已經在我的SQL程序(HeidiSQL)已經摸索出如何設置一個觸發但是當我跑我原來的插入,我得到的錯誤: 在觸發無法更新表「合併」,因爲它是用來通過陳述這個存儲的觸發器..? 感謝 – sluggerdog 2012-07-28 01:49:50