我正在使用与此类似的mysql约定来输入表单信息
form_id - INT PRI
user_id - INT
field_name - VARCHAR
field_value - TEXT
我目前有一个PHP脚本,它遍历所有表单字段的foreach循环,并首先检查它是否存在,如果计数大于0,则它会更新字段。如果它不存在,则插入该行。不幸的是,我试图通过PHP脚本处理超过一百个字段,并且这种方法被证明是非常耗时的。有什么更快的方法呢?我不认为我可以使用on duplicate key update
,因为只有form_id是唯一的。
每一行如何:
1, 1, name, Andy
2, 1, date, 2012-10-05
3, 2, name, John
这样有意义吗?
答案 0 :(得分:0)
我看到这是MySQL。在您的描述之后,您正在使用PHP进行双重工作。只需收集所有值并使用正确的SQL将它们激发到数据库中。为此,您可以使用MERGE STATEMENTS,它几乎在所有数据库系统上都可用,只是使用不同的语法。合并语句正在插入一行,如果一行已经存在,则只更新具有新值的行。或者你可以说它应该忽略行等许多可能性。
例如(NOT MYSQL!):
MERGE INTO tablename USING table_reference ON (condition)
WHEN MATCHED THEN
UPDATE SET column1 = value1 [, column2 = value2 ...]
WHEN NOT MATCHED THEN
INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...
在MySQL中它有点不同。在那里你使用INSERT... ON DUPLICATE UPDATE
http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
为此,这是一个例子(没有使用你的字段):
INSERT INTO table (table.a, table.b, table.c, table.d) -- define your insert statement
VALUES -- use the VALUES command to add several rows, or just one. Depends on your interface
('key1','key2','exampleVal','exampleValb'),
('key1','key3','exampleVal2131','exampleValasfasf')
ON DUPLICATE KEY UPDATE -- Here the check appears. If the Values with key (a) + key (b) exist it will just UPDATE the fields c and d with VALUES(table.c) and VALUES(table.d)
table.c = VALUES(table.c),
table.d = VALUES(table.d)
我希望我无论如何都能理解这一点。但这可以为你节省很多时间!