数据存储优化

时间:2012-09-21 08:45:28

标签: php mysql html sql web

我有一个表格,可以通过点击添加/删除按钮动态添加/删除新行。

当我尝试将新添加/删除的行保存回数据库时,我的问题就出现了。我设法使用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 个答案:

答案 0 :(得分: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,则插入一行   会导致UNIQUE索引或PRIMARY KEY中的重复值   执行旧行的更新。

如果您从PHP脚本运行这些查询,则应确保使用预准备语句(mysqli或PDO)。如果您正在使用常规的mysql扩展,那么您将使用每个查询进行数据库服务器的往返。但是,使用预准备语句,您可以将类似的查询分组到一个预准备语句中,并使用不同的数据多次执行它。