PHP数组-获取特定作业每月的小时数总和

PHP数组-获取特定作业每月的小时数总和,php,arrays,Php,Arrays,我将非常感谢您对php数组的帮助。我需要创建一个图表,但我似乎无法按我希望的方式从数据库中获取值。 所以基本上我需要的是每个月的工作时间。 数据库如下所示: Date | Job | Hours 2012-01-01 | 104 | 8.5 $job = array('22', '6', '12', '55'); 每一份工作都有不同的数字,但我希望这能有所帮助 我需要得到每个月花在一项工作上的总小时数。 到目前为止,我已经制作了几个月的数组,并在其中循环:

我将非常感谢您对php数组的帮助。我需要创建一个图表,但我似乎无法按我希望的方式从数据库中获取值。 所以基本上我需要的是每个月的工作时间。 数据库如下所示:

Date       |   Job   | Hours
2012-01-01 |  104    |   8.5
$job = array('22', '6', '12', '55');
每一份工作都有不同的数字,但我希望这能有所帮助

我需要得到每个月花在一项工作上的总小时数。 到目前为止,我已经制作了几个月的数组,并在其中循环:

 $month_date_array = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12');
 foreach ($month_date_array as $month) {
 $sql = "SELECT * FROM database WHERE date LIKE '%-$month-%'";
 $result = mysql_query($sql) or die (mysql_error());
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
      $job[] = $row['job'];
    }
}
好的,我做了一些更改,我将更新我的问题: 年份确实重要,它不能将2011年和2012年归为一类。年份来自下拉菜单-用户选择年份。 接下来,我添加了一个作业数组,因为我刚刚发现我不能接受所有作业,所以作业数组如下所示:

Date       |   Job   | Hours
2012-01-01 |  104    |   8.5
$job = array('22', '6', '12', '55');

基本上,我想知道如何计算每个人每个月做一项工作所花费的时间总和。我不想用SQL来做这件事,我需要某种数组,因为以后我必须组合一个图。

如果可以的话,效率相当低

SELECT month(date) AS month, COUNT(*) AS cnt
FROM database
GROUP BY month(date);

一个查询完成了您的查询循环所做的一切,并且开销小得多。

如果您可以

SELECT month(date) AS month, COUNT(*) AS cnt
FROM database
GROUP BY month(date);

一个查询完成了您的查询循环正在执行的所有操作,并且开销要小得多。

您必须像这样进行sql查询:

$sql = "SELECT * FROM database WHERE MONTH(date) = '".$month."'";
 $result = mysql_query($sql) or die (mysql_error());

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
      $job[] = $row['job'];
    }

您必须执行以下sql查询:

$sql = "SELECT * FROM database WHERE MONTH(date) = '".$month."'";
 $result = mysql_query($sql) or die (mysql_error());

    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
      $job[] = $row['job'];
    }

下面的查询如何:

SELECT SUM(hours) FROM database 
WHERE DATE_FORMAT(date,'%m' ) = $month
GROUP BY  DATE_FORMAT(date,'%m' );

下面的查询如何:

SELECT SUM(hours) FROM database 
WHERE DATE_FORMAT(date,'%m' ) = $month
GROUP BY  DATE_FORMAT(date,'%m' );

如果您想了解如何操纵和使用数组执行此操作:

<?php
$jobs = array();
$month_date_array = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12');
foreach ($month_date_array as $month) {
    $sql = "SELECT * FROM database WHERE date LIKE '%-$month-%'";
    $result = mysql_query($sql) or die (mysql_error());
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        $jobs[$row['job']][$month] += $row['hours'];
    }
}


如果您想了解如何操纵和使用数组执行此操作:

<?php
$jobs = array();
$month_date_array = array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12');
foreach ($month_date_array as $month) {
    $sql = "SELECT * FROM database WHERE date LIKE '%-$month-%'";
    $result = mysql_query($sql) or die (mysql_error());
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        $jobs[$row['job']][$month] += $row['hours'];
    }
}


我不同意大多数其他答案,因为他们也将其他年份的月份归为同一组。这样会更有效率

SELECT CAST(DATE_FORMAT(`Date`, '%Y-%m-01') AS DATE) month, SUM(`Hours`) hours
FROM `your_table`
WHERE `Job` = 104
GROUP BY month


这项技术将把你的约会“四舍五入”到每月的第一天;因此,如果按这些日期分组,则按月份分组。这很好,因为它将年份和月份合并到一列中,以便在必要时进行排序、比较和合并。

我不同意大多数其他答案,因为它们也将其他年份的相同月份分组。这样会更有效率

SELECT CAST(DATE_FORMAT(`Date`, '%Y-%m-01') AS DATE) month, SUM(`Hours`) hours
FROM `your_table`
WHERE `Job` = 104
GROUP BY month



这项技术将把你的约会“四舍五入”到每月的第一天;因此,如果按这些日期分组,则按月份分组。这很好,因为它将年和月合并为一列,以便在必要时进行排序、比较和合并。

首先,您不应该使用mysql函数,因为它们已经贬值。第二,8,5在小时列中代表什么?列格式是什么(“8,5”看起来不像数字)?将
SUM()
函数用于侧注:按日期不能有列名。这是一个mysql保留关键字。@doublesharp是的,用于表示数据,而不是存储数据。@AbhishekSaha是的,您可以;你试过了吗<代码>日期位于“不需要反勾转义的允许关键字”列表中。首先请仔细阅读,你不应该使用mysql_*函数,因为它们已经贬值了。第二,8,5在小时列中代表什么?列格式是什么(“8,5”看起来不像数字)?将
SUM()
函数用于侧注:按日期不能有列名。这是一个mysql保留关键字。@doublesharp是的,用于表示数据,而不是存储数据。@AbhishekSaha是的,您可以;你试过了吗<代码>日期位于“不需要反勾转义的允许关键字”列表中。读一下,这组2012年5月5日的结果与2013年5月5日的结果没有关系,因为它现在找到了值,但我现在不知道如何将它们以正确的方式相加。这组2012年5月5日的结果与2013年5月5日的结果没有关系,因为它现在找到了值,但我现在不知道如何正确地将它们相加。这将2012年5月*/05的结果与2013年5月*/05的结果进行分组,例如
按年份(日期)、月份(日期)
等等。OP没有提到任何关于年的内容,只提到了月。是的,很抱歉我一开始忘了提到它,我编辑了这个问题,因为年很重要。这将2012年5月的结果与2013年5月的结果进行分组,例如,
group by year(date),month(date)
blah等等。OP没有提到关于年的任何内容,只是几个月。是的,很抱歉,我一开始忘了提到它,我编辑了这个问题,因为年很重要。Sql查询对我来说不起作用,我不知道为什么,但它们没有返回任何值。。我用不同的价值观尝试了多次,但什么都没有。我仍然希望使用数组来执行这些操作,但我做了一些更改:我也添加了一个作业数组,所以也许你可以帮助我。我做了一些更改,并使其正常工作,非常感谢,很抱歉之前的错误评论:)Sql查询不适合我,我不知道为什么,但它们没有返回任何值。。我用不同的价值观尝试了多次,但什么都没有。我仍然希望使用数组来执行这些操作,但我做了一些更改:我也添加了一个作业数组,所以也许你可以帮助我。我做了一些更改,并使其正常工作,非常感谢,很抱歉之前的错误评论:)