比较PHP中的行

时间:2015-07-29 02:40:44

标签: php mysql

您好我想比较来自两个不同数据库的两个表。

第一个数据库

中选择
$sql= mysqli_query ("SELECT * FROM emasa.staff_detail");
$row = mysqli_fetch_array($sql);

第二个数据库

中选择
$sql2 = mysqli_query ("SELECT * FROM employee");
$row2 = mysqli_fetch_array($sql2);

然后我比较两个表

if ($row['icnum'] == $row2['emp_ic'])
{ 
     echo "Data already exist in both database.";
}

else
{
      while ($row = mysqli_fetch_assoc($sql))
      {
         echo "<td align='center' height='30'>" . $row ['name'] . "</td>";
         echo "<td align='center'>" .$row['icnum'] . "</td>";
      }
}

但我的问题是它只比较数据库中的第一行。

我的输出应该只显示其他数据库中不可用的人员名称。但是,这是我的输出。

根据输出,它仅比较第一行。那么如何更改我的代码以便比较整行。请帮帮我,谢谢!

1 个答案:

答案 0 :(得分:3)

您没有循环查询结果。你只需要回到第一行就可以了。

例如:

$sql= mysqli_query ("SELECT * FROM emasa.staff_detail");

这将返回一个结果集,然后您需要使用

$row = mysqli_fetch_array($sql);

获取实际值。

时会出现问题
$row = mysqli_fetch_array($sql);

本身只给你一行。

解决方案1 您必须使用以下代码:

while($row = mysqli_fetch_array($sql))
{
    //Do some comparison
}

由于你将不得不循环遍历两个不同的结果集,你将不得不在循环中进行循环,构建一个结果数组,然后循环结果然后输出你的HTML。

例如:

while($row = mysqli_fetch_array($sql))
{
    while($row2 = mysqli_fetch_array($sql2))
    {
          if ($row['icnum'] == $row2['emp_ic'])
          { 
               //add to array of equal data
          }
          else
          {
               //add to array of not equal data
          }
    }
}

foreach($array as $not_equal_or_equal_data)
{
    //output your desired HTML
}

解决方案2 根据你真正关心的内容,你可以像这样做一个sql语句

$sql = "
    SELECT
        *
    FROM
        emasa.staff_detail AS sd
        JOIN db2.employee AS e
        ON sd.icnum = e.emp_ic";

这将返回这两列相等的所有行