我很感激php数组的一些帮助。我需要创建一个图形,但我似乎无法按照我希望的方式从数据库中获取值。 基本上我需要的是每月工作时间。 数据库看起来像这样:
Date | Job | Hours
2012-01-01 | 104 | 8.5
每个工作都有不同的编号,但我希望这会有所帮助。
我需要得到每个月花在一份工作上的小时数。 到目前为止,我已经制作了几个月的数组并通过它们循环:
$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'];
}
}
Okei,我做了一些更改,我将更新我的问题: 这一年很重要,它不能将2011年和2012年组合在一起。这一年来自下拉菜单 - 用户选择哪一年。 接下来我添加了一系列作业,因为我只是发现我无法完成所有工作,因此作业数组看起来像这样:
$job = array('22', '6', '12', '55');
基本上我想知道如何获得每个人每月花在一份工作上的时间总和。而且我不想用SQL做它,我需要某种类型的数组,因为后来我必须把图形放在一起。
答案 0 :(得分:3)
如果您想学习如何操作并使用数组执行此操作:
<?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'];
}
}
但是要知道这实际上是将所有年份组合在一起。换句话说,如果存在这些日期,2011年11月,2012年和2013年将加在一起。
您也可以执行此分组并仅添加SQL。
http://sqlfiddle.com/#!2/416d9/5/0
# Group by Month and Year
SELECT YEAR(`Date`) as `Year`, MONTH(`Date`) AS `Month`, `Job`, SUM(`Hours`)
FROM `your_table`
GROUP BY `Year`, `Month`, `Job`
或http://sqlfiddle.com/#!2/416d9/6/0
# Group by Month combining the Years
SELECT MONTH(`Date`) AS `Month`, `Job`, SUM(`Hours`)
FROM `your_table`
GROUP BY `Month`, `Job`
答案 1 :(得分:1)
相当低效,何时可以
SELECT month(date) AS month, COUNT(*) AS cnt
FROM database
GROUP BY month(date);
单个查询执行查询循环正在执行的所有操作,并且开销要少得多。
答案 2 :(得分:1)
我不赞同大多数其他答案,因为他们也是在其他年份的同一个月。这样的事情会更有效率。
SELECT CAST(DATE_FORMAT(`Date`, '%Y-%m-01') AS DATE) month, SUM(`Hours`) hours
FROM `your_table`
WHERE `Job` = 104
GROUP BY month
http://sqlfiddle.com/#!2/8cf63/1
此技术会将您的日期“舍入”到该月的第一天;因此,如果您在这些日期进行GROUP,那么您将按月分组。这很好,因为它将年份和月份组合成一列,以便于分类,比较和加入,如有必要。
答案 3 :(得分:0)
你必须像这样进行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'];
}
答案 4 :(得分:0)
以下查询如何:
SELECT SUM(hours) FROM database
WHERE DATE_FORMAT(date,'%m' ) = $month
GROUP BY DATE_FORMAT(date,'%m' );