Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择具有特定记录数据的一组行_Php_Mysql_Sql - Fatal编程技术网

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

Php 选择具有特定记录数据的一组行,php,mysql,sql,Php,Mysql,Sql,我今天在这里提出一个问题,这个问题让我感到相当困惑和困惑。也许有人能给我点帮助 我有三张桌子,如下所示。请注意,对于这个问题,它们被简化了 //表2检查// check_id |task_id| status 1 | 1 | Done 2 | 1 | Done 3 | 1 | Done 4 | 2 | Done 5 | 2 | Not Done 6 | 2 | No

我今天在这里提出一个问题,这个问题让我感到相当困惑和困惑。也许有人能给我点帮助

我有三张桌子,如下所示。请注意,对于这个问题,它们被简化了

//表2检查//

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
//表2用户//

user_id |  email   | type
   1    |  a@a.com | IN
   2    |  b@b.com | IN
   3    |  c@c.com | EX
user_id |  email   | type
   1    |  a@a.com | IN
//表_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     
以下是三个表及其在表_chk_usr表中的关系

我的问题是如何从表
table\u user
中查询和选择类型为
'IN'
table\u user
行,其中
table\u检查中分配的
任务ID
的所有用户都具有
状态
=
完成

因此,预期结果应如下所示

//表2用户//

user_id |  email   | type
   1    |  a@a.com | IN
   2    |  b@b.com | IN
   3    |  c@c.com | EX
user_id |  email   | type
   1    |  a@a.com | IN
由于具有1的用户id已完成所有状态为“已完成”的任务id

我希望这对你们这些正在阅读的人来说是有意义的。任何帮助都将不胜感激


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

您可以在这里使用连接,但可能有更好的方法

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'

我想这就是你要找的

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

(1)第二个联接缺少表名。(2) 您没有检查为用户分配的所有任务是否都处于“完成”状态。您还忘记了“type='IN'”,但这并不意味着会让您感到困惑。我只是指出你忘了OP要求只返回输入“IN”的用户……哇,我说不出话来了。如果你需要肾脏或肝脏移植,请给我发一条信息。