0

实际上我正在尝试使用 dotproject 来构建我自己的小型应用程序。
我被卡在 dotproject 显示与特定项目相关的所有任务的地方。它查询数据库以触发下面的 sql

 $q->addJoin('tasks', 't1', 'projects.project_id = t1.task_project');
    $q->addQuery('com.company_name AS company_name, com_internal.company_name'
                 . ' AS company_name_internal' 
                 . ", CONCAT_WS(', ',contact_last_name,contact_first_name) user_name" 
                 . ', projects.*, SUM(t1.task_duration * t1.task_percent_complete' 
                 ." * IF(t1.task_duration_type = 24, {$working_hours}, t1.task_duration_type))" 
                 ." / SUM(t1.task_duration * IF(t1.task_duration_type = 24, {$working_hours}," 
                 . ' t1.task_duration_type)) AS project_percent_complete');

    $q->addWhere('t1.task_id = t1.task_parent');
$q->addWhere('project_id = ' . $project_id);
$q->addGroup('project_id');

我无法正确理解 sql。实际上,此 sql 检索与项目关联的所有任务。但在我的项目中,我只想要那些持续时间已完成的任务。

我如何更改 sql 以实现这一点?

4

2 回答 2

0

您可以简化大部分操作,只需查看任务表上的 task_percent_complete 字段。如果这是 100%,那么任务就完成了。

如果您希望在 dotproject 之上构建应用程序,我建议您改用 web2project。大约两年前,我们从 dotproject 分叉出来,并对系统进行了重大清理和改进。如果您有任何问题,请随时给我留言。

于 2009-10-13T14:07:58.617 回答
0

我知道回答太晚了,但希望有人能从中得到线索:

只需添加 where 查询之类的$q->addWhere('task_percent_complete = 100');

总而言之,您的代码将如下所示:

 $q->addJoin('tasks', 't1', 'projects.project_id = t1.task_project');
$q->addQuery('com.company_name AS company_name, com_internal.company_name'
             . ' AS company_name_internal' 
             . ", CONCAT_WS(', ',contact_last_name,contact_first_name) user_name" 
             . ', projects.*, SUM(t1.task_duration * t1.task_percent_complete' 
             ." * IF(t1.task_duration_type = 24, {$working_hours}, t1.task_duration_type))" 
             ." / SUM(t1.task_duration * IF(t1.task_duration_type = 24, {$working_hours}," 
             . ' t1.task_duration_type)) AS project_percent_complete');

$q->addWhere('t1.task_id = t1.task_parent');
$q->addWhere('project_id = ' . $project_id);
$q->addWhere('t1.task_percent_complete = 100'); // added new line
$q->addGroup('project_id');
于 2013-02-06T06:04:17.517 回答