实际上我正在尝试使用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以实现这一目标?
答案 0 :(得分:0)
您可以简化大部分内容,只需查看任务表上的task_percent_complete字段即可。如果那是100%,那么任务就完成了。
如果您想在dotproject上构建应用程序,我建议您查看web2project。我们大约两年前从dotproject分支出来,并且已经清理并改进了系统。如果您有任何问题,请随时给我留言。
答案 1 :(得分:0)
我知道回答太晚了,但希望有人能从中得到一个线索:
只需添加$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');