sql >> データベース >  >> RDS >> Mysql

2つの異なるデータベースからの2つの類似したクエリの結果を組み合わせたテーブルをエコーするにはどうすればよいですか?

    編集:

    結果が次のようになっていると仮定します:

    書く

    number company    db1 Count
    1      SuperCorp  5
    2      SuperCorp  10
    

    レポート

    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
    

    画面に出力する前に、2つのクエリの結果をマージする必要があります。これは、PHP配列のキーとして使用できる「number」列のおかげで可能になります。

    また、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";
    

    次に、2つの結果を組み合わせてから、次のように表示します:

    $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. 複数の電子メールまたはユーザー名を停止するにはどうすればよいですか?

    2. MySQLのカーソル式

    3. SSMS2016エラーAzureSQLv12 bacpacのインポート:パスワードなしのマスターキーはサポートされていません

    4. OracleDBMS-AFTERトリガーでの更新を処理する前にテーブルを読み取ります-テーブルを変更します