在连接到mysql的php脚本中,我必须在同一个脚本中查询2个数据库以获取不同的信息。更具体地说,一个数据库中的Faxarchives和另一个数据库中的Faxusers。
在我的代码中,我查询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
我猜测每个用户的数据库之间的切换导致了缓慢。无论如何我怎样才能提高处理速度?
提前感谢。
答案 0 :(得分:8)
你有几个问题。首先,你的函数getUserarchive会一直拉回所有行。您似乎忘记将SQL限制为仅限特定用户标识。这是你速度问题的一个重要原因。
另一种选择是传入你感兴趣的所有用户ID。重写SQL为SELECT发送,接收FROM faxarchivetable WHERE userid IN(...),这意味着你有一个选择从中撤回所有信息您的faxarchivetable,而不是每个用户ID一个。
最后,如果两个数据库都在同一个MySQL服务器上,您只需执行一次选择即可获取所有信息: SELECT Faxusers.faxuserstable.userid,已发送,已收到FROM Faxusers.faxuserstable JOIN Faxarchive.faxarchivetable ON Faxusers.faxuserstable.userid = Faxarchive.faxarchivetable.userid
答案 1 :(得分:0)
您是否知道可以通过限定表名来查询不同数据库中的表?
例如,我认为您可以在单个SQL查询中获取所有信息,如下所示:
SELECT sent, received
FROM Faxarchive.faxarchivetable
WHERE userid IN ( SELECT DISTINCT userid FROM Faxusers.faxuserstable );
哦,这与ChrisInEdmonton的观点相同。我没有注意到他的答案。