PHP,MySQL和SUMs加入

时间:2015-02-24 15:11:02

标签: php mysql join sum

长时间听众,第一次来电。希望我不要搞砸我的第一个问题!我正在开发一个报告生成应用程序,而且我遇到了第一种需要相当复杂查询的情况。

表1被称为'表现'并包含以下列:" merchant_id',' publisher',' sales',' orders' orders'以及' report_date'。

表2被称为' publishers'并且包含以下列:“发布商列表”,“发布商”,“状态”,“地点”,以及其他一些列。

我需要在报告中列出按销售额排序的前十名表演者。我需要他们的名字(发布商),他们的ID(publisher_id),他们的销售总额(销售额),订单总数(订单)以及指定时间段内的所有内容(report_date)以及特定商家(merchant_id)。

我对JOIN来说是全新的。这是我到目前为止所尝试的:

$sql = "SELECT
        performance.publisher,
        publishers.publisher_id,
        SUM(performance.orders) AS orders,
        SUM(performance.sales) AS sales
        FROM performance
        INNER JOIN publishers
        ON performance.publisher=publishers.publisher
        WHERE performance.merchant_id='$merchant->ID'
        AND (performance.report_date BETWEEN '{$dateStart}' AND '{$dateEnd}')
        GROUP BY publishers.publisher_id
        ORDER BY sales DESC LIMIT 10";

然后我运行查询并创建结果数组。

返回的确实是十个结果!正确返回publisher和publisher_id。这是混乱的总和。我试过搞乱开始和结束日期,但没有用。我无法看到返回的数字来自哪里。

我应该如何构建查询?

希望这个问题不是太具体或狭隘 - 如果是这样的话,我很乐意尝试重写它,以便对更广泛的受众更有价值。

编辑:

我原来的总结中遗漏了一条重要的信息。 publishers表还有一个名为' merchant_id'并且每个发布商将基于每个merchant_id输入此表。例如,发布商John Doe,publisher_id 123,merchant_id 12345和发布商John Doe,publisher_id 123,merchant_id 56789。

当我进行加入时,我希望得到的结果只与特定的merchant_id相关,正如您可以通过WHERE子句看到的那样。但是WHERE子句只考虑了性能表的merchant_id。它还需要考虑发布者表中的merchant_id。现在我只需要弄清楚它的查询结构。

我是StackOverflow的新手,感谢大家耐心等待并提出问题和建议。我不知道这样的编辑是否是正确的事情,或者我是否应该创建问题的答案或者是什么。

1 个答案:

答案 0 :(得分:0)

三件事:

  1. 确保您知道SUM()COUNT()之间的区别。您的订单似乎正在使用SUM()COUNT()就是您所需要的。
  2. 您正在滥用有害的MySQL扩展程序GROUP BY。阅读本文:http://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html尝试使用GROUP BY performance.publisher, publishers.publisher_id代替您拥有的内容。
  3. 请注意,JOIN操作本质上会导致结果集中的行组合爆炸。与ON条件匹配的每对行都会显示在结果中。这可能会导致结果中出现双重或多重计数。目前还不清楚你是否重复计算。但要注意它。