避免使用codeigniter活动记录在数据库中插入重复值

时间:2012-07-11 13:23:53

标签: database insert duplicates

我每隔5分钟在一个提取xml Feed的文件上运行一个cronjob,此时它只是将该Feed添加到数据库中,所以我可能会在下面。

title, this is a new title
title, this is another title

但我遇到的问题是当cron再次运行时我会低于

title, this is a new title
title, this is another title
title, this is a new title
title, this is another title

再次运行时

title, this is a new title
title, this is another title
title, this is a new title
title, this is another title
title, this is a new title
title, this is another title

等等......

我只希望它插入记录,如果它们不是已经在具有相同标题的数据库中的记录,那么我的cron作业将继续运行,当它注意到不同的标题时,它会将其插入到数据库中。

我尝试过很多单独的选项,例如not_like等。

有人可以告诉我最好的方法吗?

谢谢你;)

我设法用以下方法做到了,但绝对不是最好的方式

    function addResults($data){

   $this->db->select('title');
       $this->db->from('articles');
       $this->db->where('title = ' . "'" . $data['title'] . "'");
       //$this->db->limit(1);
       $query=$this->db->get();
       echo $query->num_rows();
       if($query->num_rows()){

   }else{
        echo 'New Record ' . $data['title'];
        $this->db->set('date', 'NOW()', FALSE); 
            $this->db->insert('articles', $data);
        }

    }

1 个答案:

答案 0 :(得分:2)

我知道我参加派对的时间有点晚了,但这是一个稍微好一点的方法:

function addResults($data)
{
    $result = $this->db->get_where('articles', array('title ' => $data['title']));
    $inDatabase = (bool)$result->num_rows();

    if (!$inDatabase)
    {
        echo 'New Record ' . $data['title'];
        $this->db->set('date', 'NOW()', FALSE); 
        $this->db->insert('articles', $data);
    }
}