数组上的php循环以计算数据库中的条目

Posted

技术标签:

【中文标题】数组上的php循环以计算数据库中的条目【英文标题】:php loop on array to calculate entries from database 【发布时间】:2015-09-15 23:03:26 【问题描述】:

我有一个从 2 个数据库表 stafftime 创建的数组。 数组如下所示:

`array(44)  
[0]=> string(2) "25" 
["id"]=> string(2) "12" 
[1]=> string(2) "12" 
["staff_id"]=> string(2) "12" 
[2]=> string(3) "9.6" 
["timein"]=> string(3) "9.6" 
[3]=> string(0) "" 
["onholiday"]=> string(0) "" 
[4]=> string(10) "2015-06-29" 
["dateadded"]=> string(10) "2015-06-29" 
[5]=> string(0) "" 
["ill"]=> string(0) "" 
[6]=> string(1) "1" 
["notes"]=> string(1) "1" 
[7]=> string(2) "12" 
[8]=> string(4) "name" 
["staff_name"]=> string(4) "name" 
`

有相同staff_id 的数组。 我想要做的是创建一个 php 循环,查找具有相同 staff_id 的所有数组并计算 time_in 值。

我现在有

$sql = "SELECT *  
        FROM time, staff 
        WHERE dateadded BETWEEN '$startdate' AND '$enddate' 
        AND time.staff_id = staff.id 
        ORDER BY dateadded DESC;";
$result =  mysqli_query($connect, $sql);
while($row = mysqli_fetch_array($result))
echo $row['staff_name'];

但是正如你所看到的,这只是非常简单,并从数据库中返回名称列表。

我的数据库表如下: 工作人员:

id |staff_name|department_id
----------------------------
1  |Joe Bloggs|1
2  |John Smith|3
10 |staff3    |6
12 |name      |1
13 |Jo Bloggs |1

时间:

id |staff_id|timein|onholiday|dateadded|ill|notes
-------------------------------------------------
12 |12      |3     |         |         |   |
13 |1       |6     |         |         |   |
14 |1       |4     |         |         |   |
15 |1       |7     |         |         |   |
16 |1       |7     |         |         |   |
17 |1       |7     |         |         |   |
18 |10      |7     |         |         |   |
19 |2       |7     |         |         |   |
20 |1       |8     |         |         |   |
21 |1       |7     |         |         |   |
22 |1       |7     |         |         |   |
23 |2       |8     |         |         |   |
24 |10      |9     |         |         |   |
25 |12      |9.5   |         |         |   |

【问题讨论】:

请使用mysqli_fetch_assoc($result),因为使用返回数组会更容易。 请发布两个表的表结构,让我们知道您需要从这两个表中得到什么,最终结果 另外请阅读教程/php 手册,因为您要求的是一个简单的 PHP 脚本,您希望有人为您编写。 【参考方案1】:

如果我理解正确的话,这可以只使用 SQL 而无需额外的 PHP:

SELECT staff.id, SUM(time.timein) As TimeIn
    FROM time, staff 
    WHERE dateadded BETWEEN '$startdate' AND '$enddate' 
    AND time.staff_id = staff.id
    GROUP BY staff.id;

我对列名做了一些猜测,因此您需要进行修改以使其适合您的数据库。阅读更多关于GROUP BYhere的信息。

【讨论】:

感谢@anders,这看起来可以完成这项工作。我不能投票,因为我还没有足够的代表,但我已经接受了这个和我的回答。 啊@anders Ive 刚刚意识到我需要将结果分成 4 周,但此语句输出总数。有没有办法可以在语句之间使用多个并分别输出每个结果,还是比这更复杂? 可以在 SQL 中进行。不仅按staff.id 分组,还按返回星期数的表达式分组。在 MySQL 上,它看起来像 WEEK(dateadded)。阅读更多关于WEEKhere的信息。

以上是关于数组上的php循环以计算数据库中的条目的主要内容,如果未能解决你的问题,请参考以下文章

从 PHP 中的循环中排除(黑名单)多个 Json 条目

PHP 计算数据库表中的条目

Phpmyadmin 仅接受来自具有多个输入值的 json 数组中的一个条目

PHP按值搜索数组中的所有条目

如何从 PHP 中的双精度数组中计算第 n 个百分位数?

如何以某种并行的方式有效地计算两个数组列表的外积?