Php 统计每个销售员每月的总数

Php 统计每个销售员每月的总数,php,mysql,sql,Php,Mysql,Sql,我有一个带订单的mySQL表。每个表行包括订单日期、金额和销售人员 order_id | amount | saleman_id | order_date 我想查询它,这样我就可以生成一个HTML表,其中包含一个看起来像这样的报告 Year | Month | Total | Total for salesman 1 | Total for salesman 2 | etc... 2014 | 10 | 5000 | 2000

我有一个带订单的mySQL表。每个表行包括订单日期、金额和销售人员

 order_id   | 
 amount     |  
 saleman_id | 
 order_date
我想查询它,这样我就可以生成一个HTML表,其中包含一个看起来像这样的报告

 Year | Month | Total | Total for salesman 1 | Total for salesman 2 | etc...
 2014 | 10    | 5000  | 2000                 | 3000                 | etc...
 2014 | 11    | 6000  | 5000                 | 1000                 | etc...
这已经部分起作用了,这意味着我有一个查询,允许我创建一个报告,显示所有销售人员每月的总数,但我想知道是否有办法在单个SQL查询中实现我想要的,以及它是否值得。否则,我可以在PHP while循环中查询每个销售人员的结果,该循环生成我已有的th表

当前查询是:

SELECT 
YEAR(ord_date) AS year, 
MONTH(ord_date) AS month,  
ROUND(SUM(...colum calculations...),2) AS sales, 
COUNT(o.ord_id) AS count_orders 
FROM 
orders_ord AS o 
GROUP BY 
year, month
ORDER BY year DESC, month DESC;

我正在使用PHP5.4和经典的mysql模块&mySQL5.5

而没有看到您的show create table,很难给出精确的查询。总的来说,我喜欢用SQL而不是PHP做所有的工作。但是,如果您有一个数据网格,并且希望显示小计或总计,则使用PHP将行相加

无论如何,这里有一些查询可以帮助您

此查询将为您提供四舍五入的利润和四舍五入的销售额

SELECT 
rep_id,
YEAR(ord_date) AS year, 
MONTH(ord_date) AS month,  
MONTHNAME(ord_date) AS monthname, 
ROUND(SUM(...colum calculations...),2) AS profit,
ROUND(SUM(...colum calculations...),2) AS sales, 
COUNT(o.ord_id) AS count 
FROM 
orders_ord AS o 
GROUP BY rep_id, year, month
ORDER BY year DESC, month DESC;

您可以使用以下工具执行您想要的操作:

但是,由于汇总的性质,我建议将
组中的年和月与
组合:

SELECT YEAR(ord_date) AS year, MONTH(ord_date) AS month, repid, MONTHNAME(ord_date) AS monthname, 
       ROUND(SUM(...colum calculations...),2) AS profit,
       ROUND(SUM(...colum calculations...),2) AS sales, 
       COUNT(o.ord_id) AS count 
FROM orders_ord  o 
GROUP BY YEAR(ord_date) * 100 + MONTH(ord_date) desc, repid with rollup;

这将只为单个月份放置摘要行,而不是一年和一个月的摘要。

让数据库完成所有工作,它擅长于。(并在从PHP填补空白时,将所有额外的行程保存到数据库。)


需要调整的是,如果真的不提供年度总数。

您的问题是什么?您使用的是哪种MySQL API?MySQL服务器5.5.28,数据库客户端版本:libmysql-5.1.73@Mike“我想获得一份报告,在每行上显示每个销售人员每月的总销售额和每月的总销售额”如果可能的话,使用什么样的SQL来实现这一点。意思是说,
mysql\uuuz
-
mysqli\uuuz
或PDO?我想你想用PHP做这个?或者,仅仅是一个直接的SQL调用?对不起:)我想用PHP来做这个,对吗。我使用的API是mysql,但我也可以使用mysql。汇总和排序不是互斥的吗?为什么一年乘以100?@LavaRo。第二种方法是只获得一个汇总行(而不是一年一个月)。第一个原因是,我认为5.7版本的限制已经解除,不再支持使用
groupby
进行默认排序。那是一种误解;它们仍然是相互排斥的。
SELECT YEAR(ord_date) AS year, MONTH(ord_date) AS month, repid, MONTHNAME(ord_date) AS monthname, 
       ROUND(SUM(...colum calculations...),2) AS profit,
       ROUND(SUM(...colum calculations...),2) AS sales, 
       COUNT(o.ord_id) AS count 
FROM orders_ord  o 
GROUP BY YEAR(ord_date) * 100 + MONTH(ord_date) desc, repid with rollup;
SELECT 
YEAR(ord_date) AS year, 
MONTH(ord_date) AS month,  
MONTHNAME(ord_date) AS monthname, 
saleman_id,
ROUND(SUM(...colum calculations...),2) AS profit,
ROUND(SUM(...colum calculations...),2) AS sales, 
COUNT(o.ord_id) AS count 
FROM 
orders_ord 
GROUP BY  year, month, saleman_id

UNION ALL

SELECT 
YEAR(ord_date) AS year, 
MONTH(ord_date) AS month,  
MONTHNAME(ord_date) AS monthname,
'zzz Total zzz', 
ROUND(SUM(...colum calculations...),2) AS profit,
ROUND(SUM(...colum calculations...),2) AS sales, 
COUNT(o.ord_id) AS count 
FROM 
orders_ord 
GROUP BY  year, month
ORDER BY year DESC, month DESC;