尝试在amchart图形栏中显示数据时,MYSQL PDO JOIN出现问题。
当JOIN为LEFT时,返回的数据来自我的表1(ventas),而当JOIN为RIGHT时,返回的数据来自我的表2(比较),但是我需要每月显示两个分组的UNION。
这是我的代码:
$sql = $conn->prepare("SELECT
SUM(V.total) AS totalVM, //total amount in table 1
DATE_FORMAT(V.f_rventa, '%M de %Y') AS grapNM, //date in table 1
SUM(C.total) AS totalCM, //total amount in table 2
DATE_FORMAT(C.f_compra, '%M de %Y') AS grapNM //date in table 2
FROM VENTAS V RIGHT JOIN COMPRAS C //HERE WHEN I CHANGE LEFT OR RIGHT IS THE ISSUE
ON MONTH(V.f_rventa) AND YEAR(V.f_rventa) = MONTH(C.f_compra) AND YEAR(C.f_compra)
GROUP BY MONTH(C.f_rventa) ASC, MONTH(C.f_compra) ASC");
$sql->execute();
while($row = $sql->fetch(PDO::FETCH_ASSOC)) {
$totalVM = $row['totalVM'];
$totalCM = $row['totalCM'];
$grapNM = $row['grapNM'];
$ventGast[] = array("MES"=>$grapNM, "ventas"=>$totalVM, "compras"=>$totalCM);
}
这里是有关以下内容的捕获:
表格1:
table 1 ventas
表2:
table 2 compras
最佳答案
您在加入条件中没有正确比较每个月和每年。您需要明确检查month(date)= month(otherdate)和year(date)= year(otherdate):
ON MONTH(V.f_rventa) = MONTH(C.f_compra) AND YEAR(V.f_rventa) = YEAR(C.f_compra)
请注意,按代码分组也是错误的-将包含
f_rventa
的表别名为V,而不是C。GROUP BY MONTH(V.f_rventa) ASC, MONTH(C.f_compra) ASC
完整查询:
SELECT
SUM(V.total) AS totalVM,
DATE_FORMAT(V.f_rventa, '%M de %Y') AS grapNM,
SUM(C.total) AS totalCM,
DATE_FORMAT(C.f_compra, '%M de %Y') AS grapNM
FROM VENTAS V left JOIN COMPRAS C
ON MONTH(V.f_rventa) = MONTH(C.f_compra) AND YEAR(V.f_rventa) = YEAR(C.f_compra)
GROUP BY MONTH(V.f_rventa) ASC, MONTH(C.f_compra) ASC
SQLFiddle带有示例数据。