3

我正在尝试添加来自多个 mysql 数据库的项目数(我还没有添加部分)以打印我主页上的记录总数。

我已经从谷歌搜索的几个网站中获取了“计数”代码基础知识,但有些地方不太对劲。如果我在 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; 
4

2 回答 2

3

由于它们位于同一数据库主机 (localhost) 上,因此您可以在一次查询中获取它们。此方法使用子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'];
}
于 2012-04-14T00:41:02.230 回答
0

您正在建立 2 个连接,但您只打印来自连接 2 的结果:

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

执行以下操作:

$total_rows = mysql_num_rows($result2 + $result1);
print $total_rows; 
于 2012-04-14T00:34:15.617 回答