2012-04-14 89 views
3

我想添加从多个mysql数据库(我还没有到添加部分)项目的计数来打印我的主页上的记录总数。如何从多个MySQL数据库添加值

我已经从几个网站抓取了'count'代码的基础知识,但是有些东西并不完全正确。如果我在phpMyAdmin中自己运行下面的查询,它可以正常工作(我从这1个数据库中得到36个结果),但是当我在我的php页面中运行它时,通过下面的代码,它只返回1的计数。

任何想法我搞砸了?谢谢。

$connection="localhost"; 
$username="myusername"; 
$password="mypassword"; 
$database1="mydb1"; 
$database2="mydb2"; 

$db1 = mysql_connect($connection,$username,$password) or die(mysql_error()); 
$sel1 = mysql_select_db($database1, $db1); 
$query1 = "SELECT count(postID) FROM my_table"; 
$result1 = mysql_query($query1, $db1); 

$db2 = mysql_connect($connection,$username,$password) or die(mysql_error()); 
$sel2 = mysql_select_db($database2, $db2); 
$query2 = "SELECT count(postID) FROM my_table"; 
$result2 = mysql_query($query2, $db2) or die(mysql_error()); 

$total_rows = mysql_num_rows($result2); 
print $total_rows; 
+0

为什么要创建连接的多个实例?你可以简单地有一个'mysql_select_db' – hjpotter92 2012-04-14 00:37:43

回答

3

由于这些都是在同数据库主机(本地主机),你可以在一个查询中获得它们。此方法使用子查询,它将UNION与来自每个数据库的查询结合在一起,然后执行合计SUM()将它们添加在一起。

SELECT SUM(postcounts) AS total 
FROM (
    SELECT COUNT(postId) AS postcounts FROM mydb1.my_table 
    UNION ALL 
    SELECT COUNT(postId) AS postcounts FROM mydb2.my_table 
) allposts 

的原因,你的mysql_num_rows()回报计数1,因为每个查询只返回一个行 - 总COUNT(postIdD)。如果您想要检索实际数量,则需要获取该行。

假设上述存储在$result查询时,您需要的值的别名是total

if ($result) { 
    $row = mysql_fetch_assoc($result); 
    echo $row['total']; 
} 

整个事情是这样的:

$db1 = mysql_connect($connection,$username,$password) or die(mysql_error()); 
mysql_select_db($database1, $db1); 
$query = "  
    SELECT SUM(postcounts) AS total 
    FROM (
     SELECT COUNT(postId) AS postcounts FROM mydb1.my_table 
     UNION ALL 
     SELECT COUNT(postId) AS postcounts FROM mydb2.my_table 
    ) allposts "; 

$result = mysql_query($query, $db1); 

// Fetch the resultant row 
if ($result) { 
    $row = mysql_fetch_assoc($result); 
    echo $row['total']; 
} 
+0

美丽!它完美的工作!非常感谢......并一路教育我。我的MySQL和PHP技能都很小,但当我看到一个很好的例子时,我是一个很好的学习者,就像你提供的那样。再次感谢! – Andi 2012-04-14 00:55:43

+0

@安迪乐意帮忙。完整而翔实的答案对我来说非常重要 – 2012-04-14 01:36:14

0

你让2个连接,但你只能从连接2打印结果:

$total_rows = mysql_num_rows($result2); 
print $total_rows; 

做这样的事情:

$total_rows = mysql_num_rows($result2 + $result1); 
print $total_rows; 
+0

嗨保罗。我想我没有解释清楚。我是说我还没有尝试添加。我知道我会做像上面那样的事情。我只是说,我试图从只有一个数据库拉结果是不工作,使用我有的代码。 – Andi 2012-04-14 00:38:33

+0

对不起,我的错。看起来你正在设置变量'$ sel2',但你没有做任何事情。 PHP不知道你想要选择什么。 – 2012-04-14 00:43:56