2011-12-14 66 views
1

是否有可能更新,然後插入行中存在的MySQL?我有這個疑問,是否有可能更新然後在mysql中插入?

$q = $dbc -> prepare("UPDATE accounts SET lifeforce = maxLifeforce, inHospital = 0 WHERE hospitalTime <= NOW() AND inHospital = 1"); 
$q -> execute(); 

我怎麼能要麼得到主鍵爲關聯數組,然後做每個項目插入陣列中,或做一個更新和插入?

或者它涉及到做一個SELECT來獲得所有匹配條件,然後更新然後INSERT使用select中的數組?這似乎還有很長的路要做呢?

基本上我需要使用相同的主鍵INSERT到另一個表上進行更新。

+1

這可能是我,但我不知道你是什麼意思。你的意思是你想更新感興趣的行,如果他們不想插入?或者是其他東西?前者可能是「替換」,後者需要解釋:) – Nanne 2011-12-14 20:47:36

+0

不,我需要在使用主鍵更新的相同行上的另一個表上執行插入操作,如果這樣做合理的話。 – cgwebprojects 2011-12-14 20:50:43

回答

3

或者它涉及做一個SELECT來獲得所有匹配條件,然後更新然後INSERT使用select中的數組?

是的,對不起,這是主要的方法。

另一種方法是添加一個名爲(say)last_updated的列,您在更新列時設置該列。然後,您可以在驅動插入的查詢中使用該列。這將有其他優勢—我發現last_updated列很多東西—有用,但它是矯枉過正,如果這是你曾經使用過的唯一的東西。


編輯補充:另一種選擇,這只是發生在我身上,是add a triggeraccounts表,將執行你所需要的插件。這在質量上有所不同—它導致插入屬性爲accounts,而不是應用程序邏輯—的問題,但也許這就是你想要的?即使是「放入所有數據庫中約束所有應用程序邏輯永不引入不一致」陣營的最極端的黨派人士通常對觸發器持謹慎態度,他們實際上並不是實現應用程序的好方法邏輯,因爲它隱藏了某個地方沒有人會想到的邏輯。但是,如果你插入的表格是某種account_history表格,它將跟蹤對account的所有更改,那麼它可能是要走的路。

相關問題