2012-09-21 65 views
-1

我有一個表格,其中可以通過單擊添加/刪除按鈕來動態添加/刪除新行。數據存儲優化

當我嘗試將新添加/刪除的行保存回數據庫時,我的問題就開始了。我設法使用jQuery的Ajax來保存數據,所以我沒有使用post var,而是「收集」每個輸入的所有數據。我設法將所有這些數據,並將它們發送到我的store.php存儲它們。

我的問題是,我怎麼能救我的還真沒有幾個查詢的變化,我的意思是,這是什麼store.php被髮送到我的MySQL服務器的輸出:

UPDATE transport SET transporttype = "3" WHERE id = 1 
UPDATE transport SET transporttype = "2" WHERE id = 6 
UPDATE transport SET transporttype = "1" WHERE id = 7 
UPDATE transport SET transportmandataire = "1" WHERE id = 1 
UPDATE transport SET transportmandataire = "3" WHERE id = 6 
UPDATE transport SET transportmandataire = "3" WHERE id = 7 
UPDATE transport SET transportexpediteur = "1" WHERE id = 1 
UPDATE transport SET transportexpediteur = "3" WHERE id = 6 
UPDATE transport SET transportexpediteur = "3" WHERE id = 7 
UPDATE transport SET transportdestinataire = "1" WHERE id = 1 
UPDATE transport SET transportdestinataire = "2" WHERE id = 6 
UPDATE transport SET transportdestinataire = "4" WHERE id = 7 
UPDATE transport SET transporttransporteur = "5" WHERE id = 1 
UPDATE transport SET transporttransporteur = "4" WHERE id = 6 
UPDATE transport SET transporttransporteur = "3" WHERE id = 7 
UPDATE transport SET transportbondetransportnumerodesuivi = "1563123" WHERE id = 1 
UPDATE transport SET transportbondetransportnumerodesuivi = "23544" WHERE id = 6 
UPDATE transport SET transportbondetransportnumerodesuivi = "23544" WHERE id = 7 
UPDATE transport SET transportlivraisonprevisiondate = "1" WHERE id = 1 
UPDATE transport SET transportlivraisonprevisiondate = "1" WHERE id = 6 
UPDATE transport SET transportlivraisonprevisiondate = "1" WHERE id = 7 
UPDATE transport SET transportlivraisonconstatdate = "test" WHERE id = 1 
UPDATE transport SET transportlivraisonconstatdate = "test" WHERE id = 6 
UPDATE transport SET transportlivraisonconstatdate = "test" WHERE id = 7 
UPDATE transport SET transportlivraisonconstatheure = "test" WHERE id = 1 
UPDATE transport SET transportlivraisonconstatheure = "test" WHERE id = 6 
UPDATE transport SET transportlivraisonconstatheure = "test" WHERE id = 7 
UPDATE transport SET transportlivraisonprevisiondate = "1" WHERE id = 1 
UPDATE transport SET transportlivraisonprevisiondate = "1" WHERE id = 6 
UPDATE transport SET transportlivraisonprevisiondate = "1" WHERE id = 7 
UPDATE transport SET transportlivraisonprevisionheure = "1" WHERE id = 1 
UPDATE transport SET transportlivraisonprevisionheure = "1" WHERE id = 6 
UPDATE transport SET transportlivraisonprevisionheure = "1" WHERE id = 7 
UPDATE transport SET transportetat = "6" WHERE id = 1 
UPDATE transport SET transportetat = "1" WHERE id = 6 
UPDATE transport SET transportetat = "6" WHERE id = 7 
UPDATE transport SET transportimperatif = "09/17/2012" WHERE id = 1 
UPDATE transport SET transportimperatif = "09/18/2012" WHERE id = 6 
UPDATE transport SET transportimperatif = "09/09/2012" WHERE id = 7 
UPDATE transport SET transportbondetransportmoyendetransmission = "2" WHERE id = 1 
UPDATE transport SET transportbondetransportmoyendetransmission = "2" WHERE id = 6 
UPDATE transport SET transportbondetransportmoyendetransmission = "1" WHERE id = 7 
UPDATE transport SET transportbondetransportassurance = "86" WHERE id = 1 
UPDATE transport SET transportbondetransportassurance = "86" WHERE id = 6 
UPDATE transport SET transportbondetransportassurance = "86" WHERE id = 7 
UPDATE transport SET transportobservation = "Aucune observation disponible." WHERE id = 1 
UPDATE transport SET transportobservation = "Aucune observation disponible." WHERE id = 6 
UPDATE transport SET transportobservation = "Aucune observation disponible." WHERE id = 7 
UPDATE transport SET transportreclamationmotif = "3" WHERE id = 1 
UPDATE transport SET transportreclamationmotif = "4" WHERE id = 6 
UPDATE transport SET transportreclamationmotif = "1" WHERE id = 7 
UPDATE transport SET transportreclamationnumerosuivis = "B87GT9" WHERE id = 1 
UPDATE transport SET transportreclamationnumerosuivis = "656786" WHERE id = 6 
UPDATE transport SET transportreclamationnumerosuivis = "C89GF8" WHERE id = 7 
UPDATE transport SET transportreclamationdate = "09/17/2012" WHERE id = 1 
UPDATE transport SET transportreclamationdate = "09/10/2012" WHERE id = 6 
UPDATE transport SET transportreclamationdate = "09/24/2012" WHERE id = 7 
UPDATE transport SET transportreclameetat = "2" WHERE id = 1 
UPDATE transport SET transportreclameetat = "1" WHERE id = 6 
UPDATE transport SET transportreclameetat = "1" WHERE id = 7 
UPDATE transport SET transportreclamationrelancedate = "09/19/2012" WHERE id = 1 
UPDATE transport SET transportreclamationrelancedate = "09/04/2012" WHERE id = 6 
UPDATE transport SET transportreclamationrelancedate = "09/17/2012" WHERE id = 7 
UPDATE transport SET transportreclamationrelancemoyen = "1" WHERE id = 1 
UPDATE transport SET transportreclamationrelancemoyen = "1" WHERE id = 6 
UPDATE transport SET transportreclamationrelancemoyen = "1" WHERE id = 7 
UPDATE transport SET transportindemnisationdate = "09/06/2012" WHERE id = 1 
UPDATE transport SET transportindemnisationdate = "09/19/2012" WHERE id = 6 
UPDATE transport SET transportindemnisationdate = "09/11/2012" WHERE id = 7 
UPDATE transport SET transportindemnisationmontant = "600" WHERE id = 1 
UPDATE transport SET transportindemnisationmontant = "600 €" WHERE id = 6 
UPDATE transport SET transportindemnisationmontant = "600" WHERE id = 7 
UPDATE transport SET transportindemnisationmoyen = "1" WHERE id = 1 
UPDATE transport SET transportindemnisationmoyen = "1" WHERE id = 6 
UPDATE transport SET transportindemnisationmoyen = "1" WHERE id = 7 
UPDATE transport SET transportreclamationobservation = "Non pas d'observation" WHERE id = 1 
UPDATE transport SET transportreclamationobservation = "non plus" WHERE id = 6 
UPDATE transport SET transportreclamationobservation = "encore moins" WHERE id = 7 

沒有必要告訴你這個速度太慢了,像5秒鐘一樣存儲所有數據。

回答

1

你可以利用ON DUPLICATE KEY UPDATE

INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12) 
ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2); 

是做什麼的小總結:

如果你指定ON DUPLICATE KEY UPDATE,行插入該 會導致重複值在一個唯一索引或PRIMARY KEY中,一個 執行舊行的UPDATE。

如果您正在從PHP腳本運行這些查詢,則應確保您使用的是預準備語句(mysqli或PDO)。如果你使用的是普通的mysql擴展,那麼你將使用每個查詢往返數據庫服務器。但是,通過準備好的語句,可以將類似的查詢分組到一個準備好的語句中,並使用不同的數據多次執行它。

+0

你的意思是我可以準備一次查詢,然後執行每次不同的變量?它真的更快嗎? – Weacked

+0

如果您準備SQL語句,數據庫服務器將緩存查詢,允許您使用不同的數據多次執行該查詢。例如,您將爲前6個查詢創建一個準備好的語句並執行6次。然後,您將爲後面的6個查詢創建另一個準備好的語句等等。 –

+0

仍然存在一個問題,當表名不相同時,我不能使用準備語句,任何提示? – Weacked