【问题标题】:query mysql database before insertion of records from xml file via php在通过php从xml文件插入记录之前查询mysql数据库
【发布时间】:2013-11-28 10:19:38
【问题描述】:

如果我的数据库包含一些 以前的记录,如何在新记录从我的 xml 文件(包含 400 条记录)插入数据库之前查询每个 db 行到 防止重复插入 每个 xml 文件加载或读取 会议。 下面是简单读取和上传整个记录的 PHP & mysql 代码。

<?php
    $xml=simplexml_load_file("d:\salarydepartment
\salary.xml");
    $status=count($xml);
foreach ( $xml as $sal)
    {
    $name=$sal->name;
    $sex=$sal->sex;
    $state=$sal->state;
    $country=$sal->country;
    $result=mysql_query
("insert into salary
(name,sex,state,country ) values
($name,$sex,$state,$country)",$con)
    echo $status." "." Salary Records
successfully stored ! ";
    }
?>

【问题讨论】:

  • 不要再使用 mysql_* 函数了。它们已被弃用。使用 mysqli_*...
  • 也许您想在多列上使用 UNIQUE 索引,并使用 INSERT IGNORE ...?
  • 你的工资表的主键是什么?您只需在插入之前进行 SELECT 语句,以检查是否已经存在相应的记录。
  • 您可以在插入前使用带有 where 条件的 select 查询
  • Deepu、Cbroe、kewlashu 和 OlivierH 怎么能全部完成?请提供详细样本。

标签: php mysql


【解决方案1】:

改变你的餐桌方案

添加唯一性约束

这是您的插入查询:

INSERT INTO salary (name,sex,state,country) VALUES (?,?,?,?)

我假设您的表具有以下架构

salary (name, sex, state, country)

您不希望记录重复。因此,您必须有某种方法来检查记录是否已插入,这意味着一个(或多个)列必须是唯一的。我的猜测是您的 xml 文件不包含任何 unique identifiers per employee

然后我们应该考虑向收集足够信息的表添加一个约束,从而减少冲突的数量。

ALTER TABLE salary ADD UNIQUE KEY (name,sex,state,country)
//This sql statement is intended for MySQL version 5.1 please check your's

有了这个限制,唯一允许的重复是同一国家和州、同性别和同名的人。

添加主键

现在,这不是一个好的解决方案,所以我根据以下假设提出一个更好的解决方案

  • 员工有一个唯一的 ID,可以在 xml 中找到

好的,现在很简单,但是很乏味

  • 我们需要在表中添加一列ALTER TABLE salary ADD COLUMN...
  • 我们需要用每个员工的唯一 ID 填充 所有 元组
  • 我们终于添加了important约束ALTER TABLE salary ADD PRIMARY KEY...

该表格现已针对快速搜索进行了优化

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多