使用where或if打开DUPLICATE KEY UPDATE

时间:2012-05-28 21:40:17

标签: php mysql

我目前有3个独立测验存储在3个单独测验中的测验结果完全相同,所以我在这个结构中有quiz_results_1,quiz_results_2和quiz_results_3:

用户名| quest1 | quest2 | quest3 | quest4 | quest5 | quest6 | quest7 | quest8 | quest9 | quest10 |完整

我想将这些表合并到1个表中,并包含一个quiz_id来确定哪些结果适用于哪个测验:

quiz_id |用户名| quest1 | quest2 | quest3 | quest4 | quest5 | quest6 | quest7 | quest8 | quest9 | quest10 |完整

我可以使用此查询来更新相关表,并将用户名作为主键:

mysql_query("INSERT INTO quiz_results_1 (quest1,quest2,quest3,quest4,quest5,quest6,quest7,quest8,quest9,quest10,username‌​,complete) VALUES $queryData ON DUPLICATE KEY UPDATE quest1=VALUES(quest1),quest2=VALUES(quest2),quest3=VALUES(quest3),quest4=VALUES(‌​quest4),quest5=VALUES(quest5),quest6=VALUES(quest6),quest7=VALUES(quest7),quest8=‌​VALUES(quest8),quest9=VALUES(quest9),quest10=VALUES(quest10),complete=VALUES(comp‌​lete)");

我想只使用一个表,如果行不存在则插入,如果用户名和quiz_id存在则更新。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

为3个测验设置3个表格并不是一个很好的设计。

因此,您选择仅使用一个表格似乎是合适的,但您应将主键更改为(quiz_id, username) - 这也将解决UPDATE语句问题。

或者,如果您要为每个用户存储测验的不同版本/历史记录,请将主键更改为:(quiz_id, username, complete)