我需要从两个单独的服务器上的两个单独的数据库中检索数据(用户名和电子邮件地址),并检查用户名是否仅存在于一侧而不是另一侧,并将结果显示在表中。根据我的研究,它不可能在mySQL中进行跨服务器查询,所以我试图在PHP中完成所有操作,但是我遇到了没有结果而且我的代码变得难以理解。主要问题是我需要输出与用户名相关联的电子邮件地址,但只有第一个数据库具有用户名和电子邮件地址列表。我确信我的算法效率很低,我很乐意看到一些简单的解决方案。
$handle1 = mysql_connect($db_host1,$db_username1,$db_password1);
mysql_select_db($db_name, $handle1);
$query1 = "SELECT username, email, FROM tblservices";
$result1 = mysql_query($query1);
while($row = mysql_fetch_array($result1){
$arr1[]=array(username=>$row['username'],email=>$row['email']);}
$handle2 = mysql_connect($db_host2,$db_username2,$db_password2);
mysql_select_db($db_name, $handle2);
$query2 = "SELECT username from tblradius";
$result2 = mysql_query($query2, $handle2);
while($row = mysql_fetch_array($result2)){
$arr2[]=$row['username'];
}
echo "<p>List of users in DB1 and not DB2</p>";
$x=0;
foreach($arr1 as $row1) {
$user1=$row1['username'];
$email=$row1['email'];
foreach($arr2 as $user2) {
if ($user1==$user2) {
$x=1;
}
}
if ($x==0) {
echo "<p>$user1 - $email is not in DB2</p>";
}
$x=0;
}
}
echo "<p>List of users in DB2 and not DB1</p>";
$x=0;
foreach($arr2 as $user1) {
foreach($arr1 as $row2) {
$user2=$row2['username'];
if ($user1==$user2) {
$x=1;
}
}
if ($x==0) {
foreach($arr2 as $row3) {
$user3 = $row3['username'];
$email = $row3['email'];
if ($user1==$user3) {
echo "<p>$user3 $email - is in DB2 and not DB1</p>";
}
}
}
$x=0;
}
}
答案 0 :(得分:1)
这样的事情可以解决问题
//connect and query DB1
while($row = mysql_fetch_assoc($result1)) {
$users[$row['username']] = $row['email'];
}
//Connect and query DB2
while($row2 = mysql_fetch_assoc($result2)) {
if(isset($users[$row2['username']])) {
unset($users[$row2['username']]);
} else {
$db2users[$row2['username']] = "No mail given for user";
}
}
foreach($users as $username => $email) {
echo $username . " - " . $email . " does not exist in DB2";
}
foreach($db2users as $db2username => $db2email) {
echo $db2username . " - " . $db2email . " does not exist in DB1";
}
它的作用是将第一个查询中的所有用户添加到一个数组中,然后根据数组键将它们删除(如果它们存在于第二个数组中,这样性能也很好。)
最终数组将包含DB1中存在但不存在于DB2中的所有用户的名称和邮件。
将这些连接和查询遗漏给DB,因为你已经有了这些。
答案 1 :(得分:0)
使用电子邮件地址作为第一个数组中的键来简化数组:
<?php
$array1 = array('user1@example.com' => 'user1',
'user2@example.com' => 'user2',
'user3@example.com' => 'user3',
'user4@example.com' => 'user4');
$array2 = array('user2', 'user4');
$dif = array_diff($array1, $array2);
print_r($dif); // outputs Array ( [user1@example.com] => user1 [user3@example.com] => user3 )
?>
$ dif在DB1中为您提供了一组用户,但在DB2中没有。