Мне нужно сравнить столбец таблицы из двух разных типов баз данных (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 ++.
Нет пробелов или обычных пробелов (хотя я все еще пытался их удалить), которые могли бы повлиять на это сравнение, поскольку мы выполняем очистку строк перед их вставкой в нашТаблицы.
Любая идея, что может пойти не так, любой другой возможный метод для этого типа сравнения?нужна для отчета, поэтому не можете использовать бесплатные инструменты.