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

これは答えるのが遅すぎることはわかっていますが、誰かがこれから手がかりを得ることを願っています:

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 に答える
0

そのほとんどを単純化して、タスク テーブルの task_percent_complete フィールドを見るだけで済みます。それが 100% の場合、タスクは完了です。

dotproject の上にアプリを構築しようとしている場合は、代わりに web2project をチェックすることをお勧めします。約 2 年前に dotproject から分岐し、システムを大幅にクリーンアップして改善しました。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2009-10-13T14:07:58.617 に答える