我正在尝试运行查询并从同一服务器上的多个数据库(使用 UNION 子句)获取结果,但它对我不起作用。所有数据库中的表名和列名都是相同的(相同的杯子,相同的咖啡,不同的“商店”:D)。这是我的sql语句:
$result = mysql_query("SELECT MONTH(ScanDate) AS sdmonth, YEAR(ScanDate) AS sdyear,
COUNT(Investigation) AS Investigation, COUNT(CASE WHEN `Gender` = 'Male' THEN 1 END) AS MaleCount,
COUNT(CASE WHEN `Gender` = 'Female' THEN 1 END) AS FemaleCount, SUM(InvestigationAmount) AS investigationAmount, SUM(AmountDue) AS AmountDue
FROM `database1`.`table_name`
UNION
SELECT MONTH(ScanDate) AS sdmonth, YEAR(ScanDate) AS sdyear,
COUNT(Investigation) AS Investigation, COUNT(CASE WHEN `Gender` = 'Male' THEN 1 END) AS MaleCount,
COUNT(CASE WHEN `Gender` = 'Female' THEN 1 END) AS FemaleCount, SUM(InvestigationAmount) AS investigationAmount, SUM(AmountDue) AS AmountDue
FROM `database2`.`table_name`
WHERE (ScanDate BETWEEN '{$ScanDate1}' AND '{$ScanDate2}')
UNION
SELECT MONTH(ScanDate) AS sdmonth, YEAR(ScanDate) AS sdyear,
COUNT(Investigation) AS Investigation, COUNT(CASE WHEN `Gender` = 'Male' THEN 1 END) AS MaleCount,
COUNT(CASE WHEN `Gender` = 'Female' THEN 1 END) AS FemaleCount, SUM(InvestigationAmount) AS investigationAmount, SUM(AmountDue) AS AmountDue
FROM `database3`.`table_name`
WHERE (ScanDate BETWEEN '{$ScanDate1}' AND '{$ScanDate2}')");
//-create while loop and loop through result set
while($row=mysql_fetch_array($result)){
$month_doe=$row['sdmonth'];
$year_doe=$row['sdyear'];
$si=$row['Investigation'];
$male=$row['MaleCount'];
$female=$row['FemaleCount'];
$sum_investigation=number_format($si);
$sia=$row['investigationAmount'];
$sum_investigationamount=number_format($sia);
$srd=$row['AmountDue'];
$sum_rebatedue=number_format($srd);
}
我绝对不知所措,做了很多错误的事情,因为这只输出第二个数据库的结果。有人能指出我正确的方向吗?谢谢。
如果我的连接参数也有问题,以下是我的连接详细信息:
<?php
$conn = mysql_connect('localhost', 'root', '');
if (!$conn)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("", $conn);
?>
最佳答案
有几件事值得一看。首先,默认情况下,MySQL 中的 UNION 作为 DISTINCT 运行,丢弃它认为相等的行。
如果您想返回所有行,则需要使用 UNION ALL 而不是仅使用 UNION。
我会尝试使用 UNION ALL。
如果这仍然不起作用,那么您为所有变量提供别名的方式可能会对它们的返回方式造成严重破坏。
我会修改它以删除第二个和第三个选择语句的别名,如下所示:
"SELECT MONTH(ScanDate) AS sdmonth, YEAR(ScanDate) AS sdyear,
COUNT(Investigation) AS Investigation, COUNT(CASE WHEN `Gender` = 'Male' THEN 1 END) AS MaleCount,
COUNT(CASE WHEN `Gender` = 'Female' THEN 1 END) AS FemaleCount, SUM(InvestigationAmount) AS investigationAmount, SUM(AmountDue) AS AmountDue
FROM `database1`.`table_name`
UNION ALL
SELECT MONTH(ScanDate), YEAR(ScanDate),
COUNT(Investigation), COUNT(CASE WHEN `Gender` = 'Male' THEN 1 END),
COUNT(CASE WHEN `Gender` = 'Female' THEN 1 END), SUM(InvestigationAmount), SUM(AmountDue)
FROM `database2`.`table_name`
WHERE (ScanDate BETWEEN '{$ScanDate1}' AND '{$ScanDate2}')
UNION ALL
SELECT MONTH(ScanDate), YEAR(ScanDate),
COUNT(Investigation), COUNT(CASE WHEN `Gender` = 'Male' THEN 1 END),
COUNT(CASE WHEN `Gender` = 'Female' THEN 1 END), SUM(InvestigationAmount), SUM(AmountDue)
FROM `database3`.`table_name`
WHERE (ScanDate BETWEEN '{$ScanDate1}' AND '{$ScanDate2}')"
希望有帮助
关于php - 通过PHP有条件地统计MYSQL列行(多个数据库)并输出数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40588331/