0

私は今日、私をかなり混乱させ困惑させた質問を持ってここにいます。おそらく、そこにいる誰かが私に少し助けてくれるかもしれません。

次のように3つのテーブルがあります。この質問のために簡略化されていることに注意してください。

//table_checks//

check_id |task_id| status
   1     |  1    | Done
   2     |  1    | Done
   3     |  1    | Done
   4     |  2    | Done
   5     |  2    | Not Done
   6     |  2    | Not Done
   7     |  2    | Not Done
   8     |  2    | Done
   9     |  3    | Done
  10     |  3    | Done
  11     |  3    | Not Done
  12     |  3    | Done

//table_user//

user_id |  email   | type
   1    |  a@a.com | IN
   2    |  b@b.com | IN
   3    |  c@c.com | EX

//table_chk_usr//

check_id |user_id 
   1     |  1    
   2     |  1    
   3     |  1    
   4     |  2    
   5     |  2     
   6     |  2     
   7     |  2     
   8     |  2     
   9     |  3     
  10     |  3     
  11     |  3     
  12     |  3     

以下は、table_chk_usr テーブル内の関係を持つ 3 つのテーブルです。

私の質問は、割り当てられたすべてのユーザーが = であるテーブルから with タイプの行をクエリして選択する方法table_userです。'IN'table_usertask_idstable_checksstatusdone

したがって、期待される結果は次のようになります

//table_user//

user_id |  email   | type
   1    |  a@a.com | IN

user_id が 1 であるため、すべての task_id が完了ステータスで完了しています。

これが読んでいる人にとって意味があることを願っています。どんな助けでも大歓迎です。

サーバー側の言語として PHP を使用していることに注意してください。

4

2 に答える 2

2

これがあなたが探しているものだと思います。

select user.user_id, user.email, user.type, 
sum(if(status = 'done',1, 0)) as done, count(*) as checks
  from checks
   join chk_user on checks.check_id = chk_user.check_id
   join user on chk_user.user_id = user.user_id
   group by chk_user.user_id
   having done = checks

sqlFiddle

于 2013-03-13T20:09:32.700 に答える
0

ここで結合を使用できますが、もっと良い方法があるかもしれません。

SELECT * FROM table_checks
INNER JOIN table_chk_usr
  ON table_checks.check_id = table_chk_usr.check_id 
INNER JOIN table_user
  ON table_chk_usr.user_id = table_user.user_id
WHERE table_checks.status = 'Done'
AND table_user.type = 'IN'
于 2013-03-13T19:53:21.283 に答える