0

私は2つのテーブルを持っています

tbl_アクティビティ

 id | activity 
 1  | activity1
 2  | activity2

tbl_sub_activities

id |activityId   | subActivity   | status 
 1 |  1          | subActivity1  | done
 2 |  1          | subActivity2  | done
 3 |  1          | subActivity3  | ongoing
 4 |  2          | subActivity4  | done
 5 |  2          | subActivity5  | done

シナリオ:
アクティビティは、多くのサブアクティビティを持つことができます。

サブアクティビティのステータスがすべて完了している場合、アクティビティは完了し
ています。サブアクティビティのステータスがまだ進行中の場合、アクティビティは進行中です。

質問:
tbl_activities をクエリして、このような出力を得るにはどうすればよいですか?

 id | activity  | status
 1  | activity1 | ongoing
 2  | activity2 | done

PHPを使用してこれを行いましたが、SQLクエリを使用してこれを行う方法を知りたいです。

4

3 に答える 3

1

完了済みと継続中のステータスが 2 つしかない場合は、このクエリが機能する可能性があります

   Select a.id,a.activityid,b.status 
   from tbl_activities a 
   inner join tbl_sub_activities b on a.id=b.activityid 
   Group by a.id order by b.status DESC
于 2012-07-11T10:57:47.900 に答える
1

より良いために:

SELECT
    a.id,
    a.activity,
    case when SUM(s.status = "done") = count(s.status)
         then "DONE" else "ONGOING" 
    END
FROM tbl_activities a
INNER JOIN tbl_sub_activities s ON s.activityId = a.id
GROUP BY a.id;
于 2012-07-11T11:01:54.400 に答える