我有一个由 100 个用户组成的池,他们回答了一个问题。这些用户中只有大约 10% 会选择正确的答案。
我想创建一个新表,为90%回答错误的人中的每个人提供一行,并带有他们的用户名和他们提供的错误答案。
最好的方法是什么?
我是否应该先创建一个输入错误答案的用户名数组,然后执行foreach
循环,每次迭代都有一个插入MySQL?
或者有没有一种 MySQL 方法来获得"适用于所有没有正确回答的人"的方法?
多谢。Regards
执行大量单次插入的最快和最简单的方法是:
INSERT DELAYED
假设您有一个存储所有用户和答案的表,如下所示:
Table : all_answers
user_id | answer
joe a
mary b
john c
而正确答案是c
,你可以有一个类似的表(相同的模式)叫做wrong_answers
,并像这样填充它:
INSERT INTO wrong_answers
SELECT user_id, answer FROM all_answers WHERE answer <> `c`
您还可以创建一个触发器来为您执行此操作,或者创建一个视图。
如果在wrong_answers
中存储了其他值(例如主键),则需要指示要填充wrong_answers
中的哪些值,如下所示:
INSERT INTO wrong_answers (user,answer)
SELECT user, answer FROM answers
WHERE answer <> 'c';
使用多插入 SQL 查询,如下所示:
INSERT INTO table1 (col1, col2) VALUES (1, 2), (6, 9), (7, 8)
这将允许您在单个查询中插入所需的任意行数。
insert into new_table
select (username from old_table where got_it_wrong = 1 )