数组上的php循环以计算数据库中的条目
Posted
技术标签:
【中文标题】数组上的php循环以计算数据库中的条目【英文标题】:php loop on array to calculate entries from database 【发布时间】:2015-09-15 23:03:26 【问题描述】:我有一个从 2 个数据库表 staff
和 time
创建的数组。
数组如下所示:
`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 BY
here的信息。
【讨论】:
感谢@anders,这看起来可以完成这项工作。我不能投票,因为我还没有足够的代表,但我已经接受了这个和我的回答。 啊@anders Ive 刚刚意识到我需要将结果分成 4 周,但此语句输出总数。有没有办法可以在语句之间使用多个并分别输出每个结果,还是比这更复杂? 可以在 SQL 中进行。不仅按staff.id
分组,还按返回星期数的表达式分组。在 MySQL 上,它看起来像 WEEK(dateadded)
。阅读更多关于WEEK
here的信息。以上是关于数组上的php循环以计算数据库中的条目的主要内容,如果未能解决你的问题,请参考以下文章