我有一个INSERT查询,如下所示:
$db->Query("INSERT INTO `surfed` (user, site) VALUES('".$data['id']."', '".$id."')");
基本上我想像上面的查询一样插入,但如果该网站已经被其他用户提交,我不希望它再将相同的$id
重新提交到网站列。但是,多个用户可以查看同一个站点,并且所有用户都需要与他们查看的站点位于同一行,这会导致冲浪表具有数十万个插入,从而大大减慢了网站的速度。
是否有任何方法可能以某种方式拆分插入内容,以便如果某个网站已经提交,则不会再为其他用户提交该网站。也许有一种方法可以使用UPDATE以便没有插入过载?
谢谢,
答案 0 :(得分:0)
我想最简单的方法是设置一个存储过程,执行SELECT以检查用户站点组合是否已经在表中。如果没有,则执行insert语句。如果该组合已经存在,那么您已完成并且不执行插入。
查看存储过程手册 http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html
答案 1 :(得分:0)
如果您不需要知道是否确实插入了一行,则可以使用INSERT IGNORE ...
。
$db->Query("INSERT IGNORE INTO `surfed` (user, site) VALUES('".$data['id']."', '".$id."')");
但这假设您为列定义了唯一键。
IGNORE
此处将忽略尝试添加相同唯一密钥两次触发的完整性约束违规错误。
关于INSERT语法的MySQL参考手册有关于http://dev.mysql.com/doc/refman/5.5/en/insert.html
的一些信息答案 2 :(得分:0)
您需要设置一个条件语句,询问该ID是否已经存在,然后是否更新,否则插入