Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用来自两个不同数据库的两个类似查询的组合结果回送表?_Php_Mysql_Database_Mysqli - Fatal编程技术网

Php 如何使用来自两个不同数据库的两个类似查询的组合结果回送表?

Php 如何使用来自两个不同数据库的两个类似查询的组合结果回送表?,php,mysql,database,mysqli,Php,Mysql,Database,Mysqli,我有两个不同(但几乎完全相同)的数据库,我正在尝试生成一个表,该表将显示两个数据库上查询的组合结果。 (在MySql workbench中,这些数据库是完全独立的,并且包含被查询的数据库,我不确定这是否有区别,但知道这些可能会有用) 我需要结果表来显示以下内容: 数字|公司| db1计数| db2计数| Number和Company都在两个数据库中,两者之间的唯一区别是其中一个数据库中的计数不同 **最终会有第五列,显示两个计数之间的差异,但我最终会谈到这一点 关于得到我想要的结果,我已经考虑了

我有两个不同(但几乎完全相同)的数据库,我正在尝试生成一个表,该表将显示两个数据库上查询的组合结果。 (在MySql workbench中,这些数据库是完全独立的,并且包含被查询的数据库,我不确定这是否有区别,但知道这些可能会有用)

我需要结果表来显示以下内容:

数字|公司| db1计数| db2计数|

Number和Company都在两个数据库中,两者之间的唯一区别是其中一个数据库中的计数不同

**最终会有第五列,显示两个计数之间的差异,但我最终会谈到这一点

关于得到我想要的结果,我已经考虑了很多不同的想法,但是我仍然没有真正的想法。 如果db1和db2中的数字相同,我需要显示每一个的计数。 我目前掌握的代码是:

// Creating the connection
$conn1 = new mysqli($servername, $username, $password, $db1);
$conn2 = new mysqli($servername, $username, $password, $db2);

// Test connection
if ($conn1->connect_error) {
    die ("Connection failed: " . $conn1->connect_error);
} 
elseif ($conn2->connect_error){
    die("Connection failed: " . $conn2->connect_error);
}

$sql1 = "SELECT num.number AS Number, com.name As company, count(*)   As db1 count 
                    FROM db1.db.job_processing AS jp
                    LEFT JOIN db1.db.number AS num ON num.id=jp.number_id 
                    LEFT JOIN db1.db.company AS com on com.id=num.company_id 
                    WHERE jp.show=1 AND jp.processing_complete=1 
                    AND jp.call_start_time BETWEEN '2016-12-17' AND '2017-01-03'
                    GROUP BY Number
                    ORDER BY Number
                    LIMIT 20";
$result1 = $conn1->query($sql1);

$sql2 = "SELECT num.number AS Number, com.name AS company, COUNT(*) AS db2 Count
                FROM db2.db.job_processing AS jp
                LEFT JOIN db2.db.number AS num ON num.id=jp.number_id 
                LEFT JOIN db2.db.company AS com on com.id=num.company_id 
                WHERE jp.show=1 AND jp.processing_complete=1 
                AND jp.call_start_time BETWEEN '2016-12-17' AND '2017-01-03'
                GROUP BY Number
                LIMIT 20";
$result2 = $conn2->query($sql2);


if ($result1 = $conn1->query($sql1) && ($results2 = $conn2->query($sql1))) {
        echo"<TABLE><caption>Total Call Count Overview</caption><TR>
        <TH>Number</TH>
        <TH>Company</TH>
        <TH>db1 Count</TH>
        <TH>db2 Count</TH></TR>";

        //This is where I think my problems are arising
        while ($row1 = $result1->fetch_assoc() && ($row2 = $result2->fetch_assoc())) {
            echo"<TR><TD>". $row1["number"]. "</TD>";
            echo"<TD>". $row1["company"]. "</TD>";
            echo"<TD>". $row1["db1 Count"]. "</TD>";
            echo"<TD>". $row2["db2 Count"]. "</TD></TR>";
        }
            echo"</TABLE>";
    } else {
        echo"O Results";
        }   

    $conn1->close();
    $conn2->close();
//创建连接
$conn1=newmysqli($servername、$username、$password、$db1);
$conn2=newmysqli($servername、$username、$password、$db2);
//测试连接
如果($conn1->connect\u错误){
die(“连接失败:”$conn1->connect\U错误);
} 
elseif($conn2->connect\u错误){
die(“连接失败:”$conn2->connect\U错误);
}
$sql1=“选择num.number作为number,com.name作为company,count(*)作为db1 count
从db1.db.job_处理为jp
将db1.db.number作为num ON num.id=jp.number\u id左键连接
左键作为com.id=num.company\u id上的com加入db1.db.company
其中jp.show=1,jp.processing_complete=1
和jp.call_start_时间介于“2016-12-17”和“2017-01-03”之间
按编号分组
按编号订购
限制20”;
$result1=$conn1->query($sql1);
$sql2=“选择num.number作为number,选择com.name作为company,选择COUNT(*)作为db2 COUNT
从db2.db.job_处理为jp
以num.id=jp.number\u id上的num的形式左键连接db2.db.number
左键作为com.id=num.company\u id上的com加入db2.db.company
其中jp.show=1,jp.processing_complete=1
和jp.call_start_时间介于“2016-12-17”和“2017-01-03”之间
按编号分组
限制20”;
$result2=$conn2->query($sql2);
if($result1=$conn1->query($sql1)&($results2=$conn2->query($sql1))){
echo“呼叫总数概述
数
单位
db1计数
db2计数”;
//这就是我的问题所在
而($row1=$result1->fetch_assoc()&&($row2=$result2->fetch_assoc()){
回显“$row1[“number”]”;
echo“$row1[“公司]”;
回显“$row1[“db1计数”]”;
echo“$row2[“db2计数”];
}
回声“;
}否则{
回应“O结果”;
}   
$conn1->close();
$conn2->close();
我想这是我被困的最后一部分。我还研究了以下解决方案:

if ($result1 = $conn1->query($sql1)) {
    echo"<TABLE><caption>Total Call Count Overview</caption><TR>
    <TH>Number</TH>
    <TH>Company</TH>
    <TH>db1 Count</TH>
    <TH>db2 Count</TH></TR>";

    while ($row1 = $result1->fetch_assoc()) {
        echo"<TR><TD>". $row1["number"]. "</TD>";
        echo"<TD>". $row1["company"]. "</TD>";
        echo"<TD>". $row1["db1 Count"]. "</TD>";
        echo"<TD>". $row2["db2 Count"]. "</TD></TR>";
    }
        echo"</TABLE>";
} else {
    echo"O Results";
    }

if ($result2 = $conn2->query($sql2)) {
    echo"<TABLE><caption>Total Call Count Overview</caption><TR>
    <TH>Number</TH>
    <TH>Company</TH>
    <TH>db1 Count</TH>
    <TH>db2 Count</TH></TR>";

    while ($row_devel = $result_devel->fetch_assoc()) {
        echo"<TR><TD>". $row1["number"]. "</TD>";
        echo"<TD>". $row1["company"]. "</TD>";
        echo"<TD>". $row1["db1 Count"]. "</TD>";
        echo"<TD>". $row2["db2 Count"]. "</TD></TR>";
    }
        echo"</TABLE>";
} else {
    echo"O Results";
    }
if($result1=$conn1->query($sql1)){
echo“呼叫总数概述
数
单位
db1计数
db2计数”;
而($row1=$result1->fetch_assoc()){
回显“$row1[“number”]”;
echo“$row1[“公司]”;
回显“$row1[“db1计数”]”;
echo“$row2[“db2计数”];
}
回声“;
}否则{
回应“O结果”;
}
if($result2=$conn2->query($sql2)){
echo“呼叫总数概述
数
单位
db1计数
db2计数”;
而($row\u devel=$result\u devel->fetch\u assoc()){
回显“$row1[“number”]”;
echo“$row1[“公司]”;
回显“$row1[“db1计数”]”;
echo“$row2[“db2计数”];
}
回声“;
}否则{
回应“O结果”;
}
这只是我一直在尝试的两种解决方案。 我只是不知道如何将这两个查询合并在一起,我意识到我可能在很多地方完全错了,但如果能得到任何帮助,我将不胜感激

编辑
关于数据库,on是一个“写入”数据库,另一个是“报告”数据库。因此,每次呼叫某个号码时,都应将其添加到表中。我的查询应该是计算一个数字出现的次数。我只想显示报告内容(报告数据库)和实际内容(写入数据库)之间是否存在任何差异。

编辑:

假设您的结果如下:

$results = array();
while($row = $result1->fetch_assoc()) {
     //Adding all the 1st query results 
     $results[$row['number']] = $row;
}

while($row = $result2->fetch_assoc()) {
     if(! isset($results[$row['number']]) {
          //Mean's this row is not present in the 1st database, so add it
          $results[$row['number']] = $row;
     }else {
          //Just merging the db2 Count from the 2nd database since other fields are the same
          $results[$row['number']]['db2 Count'] = $row['db2 Count'];
     }         
}


if ($results) {
      echo"<TABLE><caption>Total Call Count Overview</caption><TR>
      <TH>Number</TH>
      <TH>Company</TH>
      <TH>db1 Count</TH>
      <TH>db2 Count</TH></TR>";

    foreach($results as $row) {
         echo"<TR><TD>". $row["number"]. "</TD>";
         echo"<TD>". $row["company"]. "</TD>";
         echo"<TD>". $row["db1 Count"]. "</TD>";
         echo"<TD>". $row["db2 Count"]. "</TD></TR>";
    }
    echo"</TABLE>";
} else {
     echo"0 Results";
}

报告

number company    db2 Count
2      SuperCorp  10
3      SuperCorp  20
如果要显示这样的表

number company    db1 Count db2 Count
1      SuperCorp  5         0
2      SuperCorp  10        10
3      SuperCorp  0         20
在将两个查询的结果打印到屏幕之前,您需要合并这两个查询的结果。这是可能的,因为您的“number”列可以用作PHP数组的键

您还需要修改SQL查询,以包含表示其他数据库计数的伪列:

$sql1 = "SELECT num.number AS Number, com.name As company, count(*)   As \"db1 count\", 0   As \"db2 count\" 
                FROM db1.db.job_processing AS jp
                LEFT JOIN db1.db.number AS num ON num.id=jp.number_id 
                LEFT JOIN db1.db.company AS com on com.id=num.company_id 
                WHERE jp.show=1 AND jp.processing_complete=1 
                AND jp.call_start_time BETWEEN '2016-12-17' AND '2017-01-03'
                GROUP BY Number
                ORDER BY Number
                LIMIT 20";

$sql2 = "SELECT num.number AS Number, com.name AS company, COUNT(*) AS \"db2 Count\", 0   As \"db1 count\" 
            FROM db2.db.job_processing AS jp
            LEFT JOIN db2.db.number AS num ON num.id=jp.number_id 
            LEFT JOIN db2.db.company AS com on com.id=num.company_id 
            WHERE jp.show=1 AND jp.processing_complete=1 
            AND jp.call_start_time BETWEEN '2016-12-17' AND '2017-01-03'
            GROUP BY Number
            LIMIT 20";
然后将两个结果合并显示,如下所示:

$results = array();
while($row = $result1->fetch_assoc()) {
     //Adding all the 1st query results 
     $results[$row['number']] = $row;
}

while($row = $result2->fetch_assoc()) {
     if(! isset($results[$row['number']]) {
          //Mean's this row is not present in the 1st database, so add it
          $results[$row['number']] = $row;
     }else {
          //Just merging the db2 Count from the 2nd database since other fields are the same
          $results[$row['number']]['db2 Count'] = $row['db2 Count'];
     }         
}


if ($results) {
      echo"<TABLE><caption>Total Call Count Overview</caption><TR>
      <TH>Number</TH>
      <TH>Company</TH>
      <TH>db1 Count</TH>
      <TH>db2 Count</TH></TR>";

    foreach($results as $row) {
         echo"<TR><TD>". $row["number"]. "</TD>";
         echo"<TD>". $row["company"]. "</TD>";
         echo"<TD>". $row["db1 Count"]. "</TD>";
         echo"<TD>". $row["db2 Count"]. "</TD></TR>";
    }
    echo"</TABLE>";
} else {
     echo"0 Results";
}
$results=array();
而($row=$result1->fetch_assoc()){
//添加所有第一个查询结果
$results[$row['number']]=$row;
}
而($row=$result2->fetch_assoc()){
如果(!isset($results[$row['number']])){
//Mean的这一行在第一个数据库中不存在,所以添加它
$results[$row['number']]=$row;
}否则{
//因为其他字段是相同的,所以只合并第二个数据库中的db2计数
$results[$row['number']['db2 Count']=$row['db2 Count'];
}         
}
如果(结果){
echo“呼叫总数概述
数
单位
db1计数
db2计数”;
foreach($结果为$行){
回显“$row[“number”]”;
回显“$行[“公司]”;
回显“$row[“db1计数”]”;
回音“$r”