Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wyświetlić tabelę z połączonymi wynikami dwóch podobnych zapytań z dwóch różnych baz danych?

Edytuj:

Zakładając, że wyniki są takie:

Napisz

number company    db1 Count
1      SuperCorp  5
2      SuperCorp  10

Zgłoś

number company    db2 Count
2      SuperCorp  10
3      SuperCorp  20

Jeśli chcesz wyświetlić taką tabelę

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

Musisz scalić wyniki dwóch zapytań przed wydrukowaniem ich na ekranie. Jest to możliwe dzięki kolumnie 'number', która może być użyta jako klucz tablicy PHP.

Musisz również zmodyfikować swoje zapytania SQL, aby zawierały fałszywą kolumnę reprezentującą inną liczbę baz danych:

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

A następnie połącz 2 wyniki wcześniej, aby je wyświetlić, w ten sposób:

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego polecenie „wyjaśnij” daje różne wyniki przy tej samej instrukcji SQL?

  2. budowanie aplikacji opartej na rolach

  3. MySQL bezpośrednie INSERT INTO z klauzulą ​​WHERE

  4. Jak obsłużyć wyjątek podczas dodawania zduplikowanej nazwy użytkownika do bazy danych w aplikacji spring mvc?

  5. Jak mogę tworzyć przyrostowe kopie zapasowe baz danych mysql?