2008-11-21 94 views
2

在我连接到mysql的php脚本中,我必须在同一个脚本中查询2个数据库以获取不同的信息。更具体地说,一个数据库中的传真存档和另一个数据库中的传真用户。mysql php:在mysql数据库之间切换很慢

在我的代码我查询faxusers,然后foreach用户,我查询Faxarchives获取用户的历史。

我可能会做这样的事情:

function getUserarchive($userid) { 
    $out= ""; 
    $dbname = 'Faxarchive'; 
    $db = mysql_select_db($dbname); 
    $sql = "select sent, received from faxarchivetable where userid = '" . $userid . "'"; 

    if ($rs = mysql_query($sql) { 
    while ($row = mysql_fetch_array($rs)) { 
     $out = $row['sent'] . " " . $row['received']; 
    }//end while 
    }//end if query 

    return ($out); 
}//end function 


$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql'); 

$dbname = 'Faxusers'; 
$db = mysql_select_db($dbname); 
$sql="select distinct userid from faxuserstable"; 
if ($rs = mysql_query($sql) { 
    while ($row = mysql_fetch_array($rs)) { 
    $out = $row['userid'] . ":" . getuserarchive($row['userid']); 
    }//end while 
}//end if query 

我猜每个用户数据库之间的切换导致的缓慢。无论如何,我可以提高处理速度?

在此先感谢。

回答

8

你有几个问题。首先,你的函数getUserarchive一直拉回所有的行。看起来你忘了限制你的SQL只有一个特定的用户ID。这是您速度问题的重要原因。

另一个选择是传入所有你感兴趣的用户标识。将SQL重写为SELECT发送,接收FROM FROM faxarchivetable WHERE userid IN(...),这意味着你将有一个选择将所有信息从您的faxarchivetable,而不是每个用户ID一个。

最后,如果这两个数据库是相同的MySQL服务器上,你可能只是做一个选择中的所有信息来拉: SELECT Faxusers.faxuserstable.userid,发送,收到Faxusers.faxuserstable JOIN Faxarchive.faxarchivetable ON Faxusers.faxuserstable.userid = Faxarchive.faxarchivetable.userid

+0

oops ..忘记在getuserarchive()函数中包含where子句。 – phill 2008-11-21 17:38:20

+0

我不知道mysql可以做子查询..我会试试..谢谢! – phill 2008-11-21 17:40:19

0

您是否知道可以通过限定表名来查询不同数据库中的表?

举例来说,我觉得你可以在一个SQL查询您的所有信息是这样的:

SELECT sent, received 
FROM Faxarchive.faxarchivetable 
WHERE userid IN (SELECT DISTINCT userid FROM Faxusers.faxuserstable); 

哦,这是同一个点ChrisInEdmonton做。我没有注意到他的答案。