尝试在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带有示例数据。

07-24 09:37
查看更多