0

我有一个 INSERT 查询,如下所示:

$db->Query("INSERT INTO `surfed` (user, site) VALUES('".$data['id']."', '".$id."')");

基本上我想像上面的查询一样插入,但是如果该站点已经由另一个用户提交,我不希望它重新提交相同$id的到站点列。但是多个用户可以查看同一个站点,并且所有用户都需要与他们查看过的站点位于同一行,这导致冲浪表有成千上万的插入,这大大降低了站点的速度。

有什么办法可以以某种方式拆分插入,这样如果一个站点已经提交,它就不会再次提交给另一个用户。也许有一种方法可以使用 UPDATE 以防止插入过多?

谢谢,

4

3 回答 3

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的信息

于 2012-10-29T19:53:12.780 回答
0

您需要设置一个条件语句,询问 id 是否已经存在,如果它确实更新,否则插入

于 2012-10-29T19:53:55.920 回答
0

我想最简单的方法是设置一个执行 SELECT 以检查用户站点组合是否已经在表中的存储过程。如果不是,则执行插入语句。如果该组合已经存在,则您已完成并且不执行插入。

查看存储过程手册 http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html

于 2012-10-29T19:49:47.600 回答