1

データベースの複数のテーブルからデータを取得する必要があり、1つのクエリを使用する必要があります。私が抱えている問題は、プロジェクトごとにいくつのタスクがあり、いくつのタスクが完了したかを数える必要があることです。

私はこれらのテーブルを手に入れました:
プロジェクト:

id    name        start_date           end_date             project_leader    finished
1     project_1   2012-08-01 00:00:00  2012-29-01 00:00:00  2                 0

ユーザー

id    username    password    email      status
1     user_1      pass_1      email_1    1
2     user_2      pass_2      email_2    1

user_has_project

userid   projectId
1        1

タスク

id   project  description          end_date               user  finished
1    1        test description 1   2012-29-01 00:00:00    1     1
2    1        test description 2   2012-29-01 00:00:00    1     0

だから私がする必要があるのは、私にこの結果を与えるはずのクエリを作成することです:
欲しい結果:

project_id  project_name    start_date           end_date             project_leader    finished       tasks      finished_tasks
1           project_1       2012-08-01 00:00:00  2012-29-01 00:00:00  user_2            0              2          1

完了したタスクの量を数える必要がある部分まで、それを機能させました。これまでにこのクエリを取得しましたが、完了したタスクはまだカウントされていません。これどうやってするの?

クエリ:

SELECT projects.id,
       projects.name,
       projects.start_date,
       projects.end_date,
       projects.finished,
       users.username AS project_leader,
       COUNT(tasks.id) AS tasks
FROM projects
LEFT JOIN tasks ON (tasks.project = projects.id)
JOIN user_has_project ON (user_has_project.projectId = projects.id)
JOIN users ON (projects.project_leader = users.id)
WHERE user_has_project.userId = 1
GROUP BY projects.id
4

1 に答える 1

1

私はここで銃を少し飛ばしています (この腸の反応が間違っている場合に備えて熟考続けます)null 以外の値のみをカウントするには:

SELECT projects.id,
       projects.name,
       projects.start_date,
       projects.end_date,
       projects.finished,
       users.username AS project_leader,
       COUNT(tasks.id) AS tasks,
       COUNT(NULLIF(tasks.finished, 0)) as finished_tasks
于 2012-08-25T17:56:22.600 に答える