【问题标题】:Compare a table column between MYSQL and SQL Server to get the difference比较 MYSQL 和 SQL Server 之间的一个表列以获取差异
【发布时间】:2019-02-22 16:16:51
【问题描述】:

我需要在 php 中比较来自两种不同类型数据库(MYSQL 和 SQL Server)的表列。

对于背景,我需要比较的表列没有相同的值,所以我首先将它们转换为正确比较,例如 MYSQL 中的值是 BN014,相当于 SQl 服务器中的 BN00000014(只是额外的 4 到 5前两个字符后的零)。我正在使用以下函数进行所需的转换,这部分似乎工作正常:

function convertWR($wr)
{
    $mysqli=$this->con;
    $wr_number =  $wr;
    $prod_zeros='';
    $p_cat=substr($wr_number,0,2);
    $p_num=substr($wr_number,2,strlen($wr_number)-2);
    $p_num_len=strlen($p_num);
    $ctrl=8;
    while ($ctrl>$p_num_len){
        $prod_zeros.="0";
        $ctrl--;
    }

    $converted_id=$p_cat.$prod_zeros.$p_num;
    return $converted_id;

}

对于比较部分,我将两个数据库的结果分别存储在名为 $wr_from_mssql 和 $wr_from_mysql 的单独数组中,然后使用函数 array_diff() 进行比较:

function compareData()
{
 //SQL Server data   
  $mssql=$this->mssql;
  if($mssql)
    {
        //echo "connected";
      if(($result = sqlsrv_query($mssql,"SELECT [ItemId] FROM [dbo].[Item]")) !== false)
      {
          $count_mssql=1;          
          $wr_from_mssql=array();

          while( $obj = sqlsrv_fetch_array( $result ))
          {
              $clean_itemid=$string = str_replace(' ', '', $obj['ItemId']);
              $wr_from_mssql[]=$clean_itemid;                
              $count_mssql++;
          }
     }


    }else {
            die(print_r(sqlsrv_errors(), true));
          }
  //-----------------------------------------------------------------------//

    //MYSQL data
    $mysqli=$this->con;
    $count_mysql=1;
    $wr_from_mysql=array();
    $sql="SELECT WR FROM products";

    $result= mysqli_query($mysqli,$sql);
    while ($row = mysqli_fetch_array($result)){

        //for the required conversion e.g BN014 to BN00000014 
        $wr= $this->dynacomWR($row['WR']);
        $clean_wr=$string = str_replace(' ', '', $wr);
        $wr_from_mysql[]=$clean_wr;            
        $count_mysql++;
    }

   //----------------------------------------------------------------------//
   //To get the difference
    $result=array_diff($wr_from_mssql,$wr_from_mysql);
    $count_diff=1;

    foreach($result as $diff)
    {
        echo  $count_diff.") ".$diff."</br>";
        $count_diff++;
    }
    mysqli_close($mysqli);        
    $result2=array_diff($result,$wr_from_mysql);   
    mysqli_close($mysqli);

}

但是我没有得到预期的结果,我仍然得到两个表中存在的 3000 多个值。我期望在获得 10,000++ 的同时获得大约 7000 个结果。

没有空格或常规空格(尽管我仍然尝试删除它们)可能会影响此比较,因为我们在将字符串插入表之前会对其进行清理。

知道可能出了什么问题,还有其他可能的比较方法吗?报告需要它,因此无法使用可用的免费工具。

【问题讨论】:

  • 你为什么要在代码中这样做?为什么不直接设置一个链接服务器并在 SQL 中完成工作?
  • 嗨 Gordon,因为必须转换 MYSQL 中的值才能匹配 SQL Server 中的对应项,例如 BN014 到 BN00000014。有关更多详细信息,请参阅我的问题的第一个编码部分。但是我从你的建议中得到了一个想法,所以我要创建一个带有转换值的新表,然后将它与链接服务器一起使用

标签: php mysql sql-server oop


【解决方案1】:

可能不是@GordonLinoff 建议的最佳方法,但我能够获得所需的结果:) 通过使用转换后的值创建一个临时表,然后使用上面的代码,当然还有一些对 mysql 查询的修改比较新临时表和 SQL Server 表之间的列值。

由于网络问题,我无法使用链接服务器,我将在未来解决这个问题。有一些截止日期。

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    相关资源
    最近更新 更多