2016-02-05 2 views
0

У меня есть этот запрос:SQL присоединения другой таблицы с условием

SELECT * 
FROM `classes` 
JOIN `classes_students` 
ON `classes`.`id` = `classes_students`.`class` 

И мне нужно добавить условие для выбора только классов, в которых в настоящее время не вошел студент (идентификатор пользователя не в classes_students, связанный с идентификатором класса), а также подсчитать, сколько учеников в этом классе.

Структура таблицы: классы: идентификатор, имя и т.д. classes_students: class_id, идентификатор_пользователя, и т.д.

данные Таблица:

classes: 
1 | test 
2 | test2 
3 | test3 

classes_students: 
1 | 1 
1 | 2 
2 | 3 
3 | 4 
3 | 5 

Ожидаемые результаты, если им пользователь с ID 1: имен классов (с числом учащихся в):

2 (1 student) 
3 (2 students) 

Все это в одном запросе. Возможно? Если да, то как?

+2

Возможно. Настройте SQLFiddle с некоторыми данными, и мы можем помочь вам разобраться. Не зная структуру таблиц и видя пример вывода, который вы хотите, мы будем только гадать. –

+0

Почему один запрос? Покажите нам некоторые данные таблицы образцов и результат, который вы хотите получить от этого запроса. – jarlh

+0

Образцы данных добавлены, спасибо. –

ответ

0
Select classid, count(*) 
from class 
    left join student on student.classid = class.classid 
group by classid 

Рад помочь для вас

+0

Это показывает мне классы, в которых я нахожусь. Но я хочу показать другие классы (там, где им нет). –

+0

Вы должны добавить, где class.classid не в (1,2,3, ..) до группы – hungitk46

0

Попробуйте этот запрос:

$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` 
      "; 
+0

Да, его работа, но когда в моем классе будет другой студент, этот класс тоже появится. И это не то, что я ожидаю. –

+0

@JeleanThomas, на самом деле не понимаю этого, «но когда в моем классе будет другой студент, этот класс тоже появится». Я думал, что вы хотите извлечь классы, которые не относятся к текущему зарегистрированному пользователю. Вышеприведенный запрос должен получить все классы, которые не имеют отношения к текущему пользователю – RomanPerekhrest

+0

да, я хочу. НО, если в классе class_students есть другая запись для выбранного класса с другим, чем фактически зарегистрированный пользователь, он будет отображаться. U может попробовать его по собственному усмотрению. :) –

0

Я понял это! :) Спасибо, ребята, за помощь.

$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` 
      "; 
Смежные вопросы