gpt4 book ai didi

php - CakePHP - 对另一个关系表中的数据求和

转载 作者:行者123 更新时间:2023-11-30 23:25:10 25 4
gpt4 key购买 nike

我不知道如何得出员工参加类(class)和集会的总小时数。这是我的数据库:-

staffs
+---+-------+-----------+
| id| Name | Department|
+---+-------+-----------+
| 1 | Joe | HR |
| 2 | Andra | Support |
| 3 | Khan | HR |
| 4 | Toll | HR |
| 5 | Gosh | Support |
| 6 | Rama | Support |
+---+-------+-----------+



attendances
+---+---------+-----------+--------------+
|id | name_id | course_id | assembly_id |
+---+---------+-----------+--------------+
| 1 | 1 | 101 | |
| 2 | 1 | 102 | |
| 3 | 1 | | 501 |
| 4 | 2 | 102 | |
| 5 | 3 | | 502 |
| 6 | 3 | 103 | |
| 7 | 4 | 101 | |
| 8 | 4 | | 501 |
| 9 | 4 | 102 | |
+---+---------+-----------+--------------+


courses
+-------+-----------+-------+
| id | name | hours |
+-------+-----------+-------+
| 101 | courses_1 | 8 |
| 102 | courses_2 | 6 |
| 103 | courses_3 | 9 |
+-------+-----------+-------+


assembly
+-------+---------------+-------+
| id | name | hours |
+-------+---------------+-------+
| 501 | assembly_1 | 2 |
| 502 | assembly_2 | 4 |
+-------+---------------+-------+

在 Model > Attendance 中我已经添加了一个关系:-

public $belongsTo = array('Staff','Course','Assembly'); 

在我的 Controller 中,我尝试编写这段代码:-

$view = $this->Staff->find('all',array(
'fields' => array('SUM(COALESCE(Course.hours,0))+SUM(COALESCE(Assembly.hours,0)) as ec_count'),'recursive'=>2));
$this->set('view', $view);

但它会返回错误..(好像我在这里做错了)

如何编写具有此条件的代码,它将通过这样的 View 显示:-

+---+-------+-----------+------------+
| id| Name | Attend | Total Hour |
+---+-------+-----------+------------+
| 1 | Joe | course_1 | 16 |
| | | course_2 | |
| | | assembly_1| |
| 2 | Andra | course_2 | 6 |
| 3 | Khan | assembly_2| 13 |
| | | course_3 | |
| 4 | Khan | course_1 | 16 |
| | | assembly_1| |
| | | course_2 | |
| 5 | Gosh | - | 0 |
| 6 | Rama | - | 0 |
+---+-------+-----------+------------+

最佳答案

除非您正在执行连接(请参阅 CakePHP Joins ),否则您将无法获得这样的 SUM,因为 CakePHP 实际上会运行单独的查询,然后组合并返回数据。

我认为您最好的办法是跟踪“staffs”表中的 Staff.course_hoursStaff.assembly_hours 字段中的总小时数。您仍然可以在 Assembly.hoursCourse.hours 中保留单独的行,但随后在 afterSave() 中(参见 CakePHP afterSave)回调(或类似的东西),更新员工工作时间字段。

然后,您可以设置一个名为 total_hours 的虚拟字段(参见 CakePHP Virtual Fields),您可以根据需要对其进行排序、显示或使用。

或者,您可以构建联接并在单个(尽管稍微复杂一些)查询中完成。

关于php - CakePHP - 对另一个关系表中的数据求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13711716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com