选择具有特定记录数据的一组行

时间:2013-03-13 19:50:04

标签: php mysql sql

我今天在这里提出一个让我感到困惑和困惑的问题。也许有人在那里可以给我一些帮助。

我有三张桌子如下。请注意,这个问题已经简化了。

// // 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表中的三个表及其关系。

我的问题是如何从表table_user中查询并选择'IN'table_user行,其中所有用户都在task_ids中分配了table_checks使用status = done

因此预期结果应如下

// // table_user

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

因为带有1的user_id已完成状态已完成的所有task_id。

我希望这对那些正在阅读的人有意义。任何帮助将不胜感激。

请注意,我使用PHP作为我的服务器端语言,如果这有任何帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'