Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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 SQL使用条件连接其他表_Php_Mysql_Sql - Fatal编程技术网

Php SQL使用条件连接其他表

Php SQL使用条件连接其他表,php,mysql,sql,Php,Mysql,Sql,我有一个疑问: SELECT * FROM `classes` JOIN `classes_students` ON `classes`.`id` = `classes_students`.`class` $user_id = 1; // current user_id $query = "SELECT `classes`.`id`, `classes`.`name`, COUNT(*) as students FROM `classes` JOIN `class

我有一个疑问:

SELECT * 
FROM `classes` 
JOIN `classes_students` 
ON `classes`.`id` = `classes_students`.`class`
$user_id = 1; // current user_id

$query = "SELECT `classes`.`id`, `classes`.`name`, COUNT(*) as students FROM `classes` 
          JOIN `classes_students` 
          ON `classes`.`id` = `classes_students`.`class_id`
          AND `classes_students`.`user_id` != $user_id 
          GROUP BY `classes_students`.`class_id`
          ";
我需要添加条件来选择当前未登录学生的班级(用户ID不在与班级ID相连的班级中),并计算该班级中有多少学生

表结构: 类别:id、名称等 班级学生:班级id、用户id等

表数据:

classes: 
1 | test 
2 | test2
3 | test3

classes_students:
1 | 1
1 | 2
2 | 3
3 | 4
3 | 5
id为1的im用户的预期输出: 班级名称(学生人数):

所有这些都集中在一个查询中。有可能吗?如果是,如何进行

Select classid, count(*)
from class
  left join student on student.classid = class.classid
group by classid
很高兴为您提供帮助

尝试以下查询:

SELECT * 
FROM `classes` 
JOIN `classes_students` 
ON `classes`.`id` = `classes_students`.`class`
$user_id = 1; // current user_id

$query = "SELECT `classes`.`id`, `classes`.`name`, COUNT(*) as students FROM `classes` 
          JOIN `classes_students` 
          ON `classes`.`id` = `classes_students`.`class_id`
          AND `classes_students`.`user_id` != $user_id 
          GROUP BY `classes_students`.`class_id`
          ";
我想出来了!:) 谢谢你们的帮助

$user_id = 1; // current user_id

$query = "SELECT `classes`.`id`, `classes`.`name`, COUNT(*) as students FROM `classes` 
          LEFT JOIN `classes_students` 
          ON `classes`.`id` = `classes_students`.`class_id`
          WHERE `classes`.`id` NOT IN (SELECT `class_id` FROM `classes_students` WHERE `user_id`='.$user_id.')
          GROUP BY `classes_students`.`class_id`
          ";

可能使用一些数据设置SQLFIDLE,我们可以帮助您解决这个问题。如果我们不知道表结构,也没有看到您想要的输出示例,我们只会猜测。为什么是一个查询?向我们展示一些示例表数据以及您希望从该查询中获得的结果。添加了示例数据,谢谢。这向我展示了我所在的类。但是我想显示其他类(我不在其中)。你应该将where class.classid not in(1,2,3,…)添加到group byYes之前,它的工作方式是,但当我的类是其他学生时,该类也会显示。这不是我所期望的。@JeleanThomas,并不真正理解这一点,“但当我的班是其他学生时,那个班也会出现”。我以为您想提取与当前登录用户无关的类。上面的查询应该得到所有与当前useryes没有关系的类。但是,当所选班级的学生在班级中有另一个记录,而不是实际登录的用户时,它会显示出来。你可以自己试试。:)