Php 对MySql中的记录进行分组
我在MySql中有两个表 1(员工):身份证/姓名/第二姓名 2(费用): Id/职员/日期(yyyy-mm-dd)/工作小时数(hh:mm)/费用(int)/工作类型 还有一个脚本将记录添加到费用表中 我正在尝试用php对数据进行分组,以创建如下html表: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. 所以一
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))作为日期”,它正在工作!非常感谢。