2012-09-21 63 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