您好我想比较来自两个不同数据库的两个表。
从第一个数据库
中选择$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>";
}
}
但我的问题是它只比较数据库中的第一行。
我的输出应该只显示其他数据库中不可用的人员名称。但是,这是我的输出。
根据输出,它仅比较第一行。那么如何更改我的代码以便比较整行。请帮帮我,谢谢!
答案 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";
这将返回这两列相等的所有行