CodeIgniter:如何在输入之前检查DB表是否有重复项?

时间:2011-02-08 03:08:48

标签: php codeigniter

我正在编写一个小应用程序,它将csv文件的内容写入CodeIgniter中的数据库,但是在写入之前我很难检查dupes。由于这是一项相当普遍的任务,我想知道一些专业人士(你)是如何做到这一点的。对于上下文和比较,这是我的(当前不工作的)代码:

        $sql = "SELECT * FROM salesperson WHERE salesperson_name='" . $csvarray['salesperson_name'][$i] . "'";
        $already_exists = $this->db->query($sql); 

        if (sizeof($already_exists) > 0) {

            //add to database

        }

任何输入完全没有“你糟透了!” (我已经在这一点上每小时听到两次我的大脑)将不胜感激。感谢。

2 个答案:

答案 0 :(得分:2)

你正在做的事情会起作用,但如上所述,比较应该是“== 0”而不是“> 0”。

您也可以使用内置num_rows方法的CodeIgniters而不是使用sizeof,如下所示:

$sql = "your query";
$query = $this->db->query($sql);

if ($query->num_rows() == 0) {
  // no duplicates found, add new record
}

作为旁注,如果您正在使用CodeIgniter,那么使用Active Record构建查询而不是编写SQL是值得的。您可以在此处了解详情:CodeIgniter - Active Record

答案 1 :(得分:1)

首先你可能想要(而不是> 0)

if (sizeof($already_exists) == 0) {
    //add to database
}

也可以将所有数据推送到一个临时的临时表,然后你可以用一些漂亮的sql清理 - 然后再推回到你的临时表。

使用mysql(或者如果你是phping的那个或者postgres)你可以试试这个(取自http://www.cyberciti.biz/faq/howto-removing-eliminating-duplicates-from-a-mysql-table/) 您必须将.ID更改为主键

delete from salesperson_temptable 
    USING salesperson_temptable, salesperson_temptable as vtable
    WHERE (NOT salesperson_temptable.ID=vtable.ID)
        AND (salesperson_temptable.salesperson_name=vtable.salesperson_name)

然后当您查看salesperson_temptable的内容时,您可以将其重新插入到销售员表中