sql >> Database teknologi >  >> RDS >> Mysql

Hvordan gentager jeg en tabel med de kombinerede resultater af to lignende forespørgsler fra to forskellige databaser?

Rediger:

Forudsat at dine resultater er sådan her :

Skriv

number company    db1 Count
1      SuperCorp  5
2      SuperCorp  10

Rapporter

number company    db2 Count
2      SuperCorp  10
3      SuperCorp  20

Hvis du vil vise en tabel som denne

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

Du skal flette resultaterne af de to forespørgsler før for at udskrive dem til skærmen. Dette er muligt takket være din 'nummer'-kolonne, som kan bruges som nøglen til dit PHP-array.

Du skal også ændre dine SQL-forespørgsler til at inkludere en falsk kolonne, der repræsenterer det andet databaseantal :

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

Og kombiner derefter de 2 resultater før for at vise dem, sådan her :

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



  1. Udfyldning af html-formularer med mysql-data ved hjælp af php coming up null

  2. flere SQL-tabeller med PHP til at generere sitemap

  3. Hvordan vælger man inde i en FOR-Loop for yderligere beregninger?

  4. Mysql DB-tabelrækker forsvinder