需要插入SQL而不重复

时间:2011-11-22 00:29:36

标签: php mysql sql codeigniter rss

目前的表格如下:

CREATE TABLE `feed_items` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `feed_id` int(11) NOT NULL,
  `remote_id` varchar(32) NOT NULL DEFAULT '',
  `title` varchar(255) NOT NULL DEFAULT '',
  `link` varchar(255) NOT NULL DEFAULT '',
  `updated_time` datetime NOT NULL,
  `created_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我需要找到一种方法,这样如果我将多个RSS提要拉入一个表格,并且具有相同标题的文章具有相同的“remote_id”值,我该如何确保不插入重复值?< / p>

我目前正在使用

$this->db->query('INSERT INTO feed_items(feed_id, remote_id, link, title, created_time, updated_time) VALUES (?, ?, ?, ?, ?, NOW()) ON DUPLICATE KEY UPDATE remote_id=remote_id', array($this->feed_id, $this->remote_id, $this->link, $this->title, $this->created_time, $this->remote_id));

我想知道是否有更好的方法?

5 个答案:

答案 0 :(得分:4)

向这两列添加UNIQUE约束。

答案 1 :(得分:4)

ALTER TABLE `feed_items` ADD UNIQUE INDEX `constraint` (`link`, `remote_id`);

答案 2 :(得分:1)

您可以使用ON DUPLICATE来避免此类情况:检查:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

希望有所帮助

答案 3 :(得分:0)

试试这个:

$this->db->query('INSERT INTO feed_items(feed_id, remote_id, link, title, created_time, updated_time) SELECT ?, ?, ?, ?, ?, NOW() WHERE not exists(SELECT 1 FROM feed_items f2 WHERE f2.title = ? and f2.remote_id = ?)', array($this->feed_id, $this->remote_id, $this->link, $this->title, $this->created_time, $this->title, $this->remote_id));

只是为了澄清 - 这个解决方案将插入更改为... values语句,插入到... select语句,附加了一个not exists()子句。如果找到与已存在的记录匹配的记录,则此not exists子句将阻止insert执行任何操作。如果存在预先存在的记录,则不会抛出错误。

答案 4 :(得分:0)

感谢您的回复!

我实际上设法在发布后几个小时解决了它,我使remote_id成为一个独特的列,然后为SQL做了以下

INSERT INTO feed_items(feed_id, remote_id, link, title, created_time, updated_time) VALUES (?, ?, ?, ?, ?, NOW()) ON DUPLICATE KEY UPDATE remote_id=remote_id