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