3

複数のmysqlデータベースからアイテムの数を追加しようとしています(まだ追加部分に到達していません)。ホームページにレコードの総数を出力します。

Googleで検索したいくつかのサイトから「カウント」コードの基本を取得しましたが、何かが正しくありません。以下のクエリを 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) にあるため、1 つのクエリで取得できます。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 を返す理由は、各クエリが 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 に答える