【问题标题】:Insert into MySQL only unique values when part of a loop仅在循环的一部分时将唯一值插入 MySQL
【发布时间】:2013-11-08 12:54:27
【问题描述】:

我有一个 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());
            }
    }

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

【问题讨论】:

    标签: php mysql foreach insert unique


    【解决方案1】:

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

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

    如果你想在错误的情况下继续运行,请使用 try...catch 语句并避免引发异常,但这是非常丑陋的解决方案。

    【讨论】:

    • 什么意思,在 zip_areacodes 上创建选择另一个记录集并将这些值放入一个数组中,然后如果数据不存在则插入数据或其他什么?
    • 是的,就是这样。如果记录不存在,您可以插入并避免重复。
    • 是否使用诸如这样的 foreach 循环,对于 10,000 的记录编号会大大降低专用服务器的速度?还是在那个尺寸下可以忽略不计?
    【解决方案2】:

    你不能简单地改变你的数据库并添加一个唯一约束吗?

    【讨论】:

    • 这会产生错误。我尝试添加 ON DUPLICATE KEY UPDATE area_codes = $value 但这也给了我一个错误。
    猜你喜欢
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2015-01-20
    • 2013-07-27
    • 2020-06-16
    • 2014-01-19
    相关资源
    最近更新 更多