Сравните столбец таблицы между MYSQL и SQL Server, чтобы получить разницу - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно сравнить столбец таблицы из двух разных типов баз данных (MYSQL и SQL Server) в php.

Для фона столбец таблицы, который мне нужно сравнить, не имеет одинаковых значений, поэтому я сначала преобразовываю их для правильного сравнения, например, значение в MYSQL равно BN014, что эквивалентно BN00000014 в SQl Server (просто дополнительноОт 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+ значений, которые существуют в обеих таблицах.Я ожидаю около 7000 результатов при получении 10000 ++.

Нет пробелов или обычных пробелов (хотя я все еще пытался их удалить), которые могли бы повлиять на это сравнение, поскольку мы выполняем очистку строк перед их вставкой в ​​нашТаблицы.

Любая идея, что может пойти не так, любой другой возможный метод для этого типа сравнения?нужна для отчета, поэтому не можете использовать бесплатные инструменты.

1 Ответ

0 голосов
/ 25 февраля 2019

Возможно, не самый лучший подход, предложенный @GordonLinoff, но я смог получить желаемые результаты :), создав временную таблицу с преобразованными значениями, а затем, используя приведенный выше код, разумеется, с некоторыми изменениями для запроса MySQL ксравните значения столбцов между новой временной таблицей и таблицей SQL Server.

Мне не удалось использовать связанный сервер из-за проблемы с сетью, которую я буду решать в будущем.Есть несколько сроков, чтобы соблюсти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...