在循环的一部分时,只将唯一值插入MySQL

时间:2013-11-08 12:54:27

标签: php mysql foreach insert unique

我有一个foreach循环,它通过存储在会话中的数组。它正在检查表中是否存在该值。如果没有,则将其插入另一个表中。这非常有效。但是,由于它们在第一个表中有很多重复 - 我最终在第二个表中有许多重复项。这是我的代码:

$today = date("Y-m-d");
$getAreaCodes = $_SESSION['area_code'];

    // Start Foreach Loop.  For every area code in session, get it's area code from the zip_zip table

    foreach($getAreaCodes as $value) {

        mysql_select_db($database_localhost, $localhost);
        $query_getAC = sprintf("SELECT area_code FROM zip_zip WHERE area_code = $value", GetSQLValueString($colname_getAC, "text"));
        $getAC = mysql_query($query_getAC, $localhost) or die(mysql_error());
        $row_getAC = mysql_fetch_assoc($getAC);
        $totalRows_getAC = mysql_num_rows($getAC);

            // If it does NOT exist, insert it into zip_areacodes.
            if (empty($row_getAC)){
                $insertSQL = sprintf("INSERT INTO zip_areacodes (area_code, date, type) VALUES (%s, %s, %s)",
                    GetSQLValueString($value, "text"),
                    GetSQLValueString($today, "text"),
                    GetSQLValueString("bad", "text"));                          
                    $Result1 = mysql_query($insertSQL, $localhost) or die(mysql_error());
            }
    }

如何使这个insert语句只插入$ value而不是多次?

2 个答案:

答案 0 :(得分:0)

您不能简单地更改数据库并添加唯一约束吗?

答案 1 :(得分:0)

如果无法添加唯一约束来保持数据完整性,则必须在zip_areacodes上执行select,以查找要插入的值。

如果您想从源表中删除重复项,请尝试Eliminate duplicates... 然后添加唯一约束键。

如果你想要运行的东西,即使是错误的使用try ... catch语句并避免异常,但这是非常难看的解决方案。