Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie gebe ich eine Tabelle mit den kombinierten Ergebnissen zweier ähnlicher Abfragen aus zwei verschiedenen Datenbanken wieder?

Bearbeiten :

Angenommen, Ihre Ergebnisse sind wie folgt:

Schreiben

number company    db1 Count
1      SuperCorp  5
2      SuperCorp  10

Bericht

number company    db2 Count
2      SuperCorp  10
3      SuperCorp  20

Wenn Sie eine Tabelle wie diese anzeigen möchten

number company    db1 Count db2 Count
1      SuperCorp  5         0
2      SuperCorp  10        10
3      SuperCorp  0         20

Sie müssen die Ergebnisse der beiden Abfragen zusammenführen, bevor Sie sie auf dem Bildschirm ausdrucken können. Dies ist dank Ihrer 'Nummer'-Spalte möglich, die als Schlüssel Ihres PHP-Arrays verwendet werden kann.

Sie müssen auch Ihre SQL-Abfragen ändern, um eine gefälschte Spalte einzuschließen, die die andere Datenbankanzahl darstellt:

$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";

Und kombinieren Sie dann die 2 Ergebnisse, um sie anzuzeigen, wie hier:

$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";
}