Php 对MySql中的记录进行分组

Php 对MySql中的记录进行分组,php,mysql,sql,group-by,Php,Mysql,Sql,Group By,我在MySql中有两个表 1(员工):身份证/姓名/第二姓名 2(费用): Id/职员/日期(yyyy-mm-dd)/工作小时数(hh:mm)/费用(int)/工作类型 还有一个脚本将记录添加到费用表中 我正在尝试用php对数据进行分组,以创建如下html表: Name, Second Name | January 2009 | 123:45 hours | 2100,00 USD February 2009... March 2009 .... Next person... etc. 所以一

我在MySql中有两个表

1(员工):身份证/姓名/第二姓名

2(费用): Id/职员/日期(yyyy-mm-dd)/工作小时数(hh:mm)/费用(int)/工作类型

还有一个脚本将记录添加到费用表中

我正在尝试用php对数据进行分组,以创建如下html表:

Name, Second Name | January 2009 | 123:45 hours | 2100,00 USD
February 2009...
March 2009 ....
Next person... etc.
所以一般来说,我试着计算特定月份的费用和小时数,并从数据库打印一份报告


我需要一些建议/帮助。。。创建这样的表的基本方法是什么?

我不能100%确定这是否完美,但它肯定会为您指明正确的方向。AVG()函数调用可能是不必要的

SELECT 
Name,
SecondName,
SUM(fee.HoursWorked) as HoursWorked,
SUM(fee.fee) as fee,
YEAR(AVG(fee.Date)) as year,
MONTH(AVG(fee.Date)) as month
FROM Staff
JOIN fee ON staff.id = fee.staffid
ORDER BY fee.Date
GROUP BY staff.id, YEAR(fee.Date), MONTH(fee.Date)

我不是100%确定这是完美的,但它肯定会为你指明正确的方向。AVG()函数调用可能是不必要的

SELECT 
Name,
SecondName,
SUM(fee.HoursWorked) as HoursWorked,
SUM(fee.fee) as fee,
YEAR(AVG(fee.Date)) as year,
MONTH(AVG(fee.Date)) as month
FROM Staff
JOIN fee ON staff.id = fee.staffid
ORDER BY fee.Date
GROUP BY staff.id, YEAR(fee.Date), MONTH(fee.Date)

也许是这样的?虽然没有测试

SELECT s.Name, s.SecondName, CONCAT(DAYOFMONTH(f.Date),', ',YEAR(f.Date)), 
SUM  (f.HoursWorked), SUM(f.Fee)
FROM Staff s
JOIN Fee f ON f.StaffId = s.Id
GROUP BY s.Id, YEAR(f.Date), MONTH(f.Date)  

编辑:当然你需要在s.Id上分组。

可能是这样的吗?虽然没有测试

SELECT s.Name, s.SecondName, CONCAT(DAYOFMONTH(f.Date),', ',YEAR(f.Date)), 
SUM  (f.HoursWorked), SUM(f.Fee)
FROM Staff s
JOIN Fee f ON f.StaffId = s.Id
GROUP BY s.Id, YEAR(f.Date), MONTH(f.Date)  

编辑:当然,您需要根据s.Id进行分组。

这不是最好的方法,但如果您想通过一个查询进行分组(很容易导出到Excel):

您还可以查询以下内容:

// that's not a real function, just get all Staff into $staff
$staff = QueryRows(SELECT * FROM Staff);
然后查询费用:

foreach($staff as $s){
  // use this query to query statistics
  SELECT * FROM fee
   WHERE StaffId = $s['id']
   GROUP BY StaffId, YEAR(f.`Date`), MONTH(f.`Date`)
}

这不是最好的方法,但如果您想通过一个查询(导出到Excel很容易)完成此操作:

您还可以查询以下内容:

// that's not a real function, just get all Staff into $staff
$staff = QueryRows(SELECT * FROM Staff);
然后查询费用:

foreach($staff as $s){
  // use this query to query statistics
  SELECT * FROM fee
   WHERE StaffId = $s['id']
   GROUP BY StaffId, YEAR(f.`Date`), MONTH(f.`Date`)
}

请有人尝试查看问题
创建这样的表格的基本方法是什么?
嗨,不是我的问题,伙计,在问题下面贴出来。请有人尝试查看问题
创建这样的表格的基本方法是什么?
嗨,不是我的问题,伙计,在问题下面贴出来,请有人尝试查看问题
创建这样的表格最基本的方法是什么?
@Harish:我明白你的意思:)我猜我的大脑跳过了NickSoft示例中“创建html表格”中的“html”,并将“CONCAT(DAYOFMONTH(f.date)”,,“,”,YEAR(f.date))用作日期,它正在工作!谢谢大家,有人试着看看这个问题,
创建这样的表格最基本的方法是什么?
@Harish:我明白你的意思:)我猜我的大脑跳过了NickSoft示例中“创建html表格”中的“html”,并使用了“CONCAT(DAYOFMONTH(f.date),”,“,YEAR(f.date))作为日期”,它正在工作!非常感谢。