2011-02-01 4 views
0

Я работаю над созданием курса, где пользователю нужно отобразить всех учащихся по X курсам. Например, если выбран класс биологии, пользователь должен иметь возможность фильтровать пользователей в зависимости от количества других курсов, в которых они уже находятся. Моя таблица имеет следующие поля: id, uid, courseid. Я хочу сделать что-то подобное, но не знаю, что синтаксис должен быть:SQL Count появление значения

SELECT * FROM course_list WHERE count(uid) > X AND courseid=Z 

Где X это количество курсов пользователя фильтруется (значение 0-3), и Z представляет собой просто идентификатор от курса, на который в данный момент смотрит пользователь.

ответ

2

Вы не можете использовать агрегатные функции в предложении where запроса. Вместо этого, они принадлежат в having части запроса, так что вам нужно будет что-то вроде:

select StudentId 
from course_list 
where CourseId = @CourseId 
group by StudentId 
having count(uid) > @MaxCount 

... или что-то по этому вопросу.

+0

Работал отлично, мой единственный вопрос - это то, что используется @? С каким количеством php я использую свои знания sql, довольно просто :( – dan

+0

@dan - Это были бы параметры для запроса. Я использовал их как заполнители вместо X и Z. Я точно не знаю, как MySQL принимает параметры. –

0

В качестве альтернативы, вы можете структурировать базу данных таким образом:

Table: Students (includes an autoincrementing ID field StudentId) 
Table: Cources (includes an autoincrementing ID field CourseId) 
Table: StudentCourseAssociation (Includes studentId, courseId, and quarter/semester/year/whatever information) 

Тогда вы просто:

SELECT StudentId, Count(*) FROM StudentCourseAssociation 
WHERE StudentId IN 
(
    SELECT StudentId FROM StudentCourseAssociation WHERE CourseId = @CourseId 
) 
AND NOT CourseId = @CourseId 
GROUP BY StudentId 

Это должно получить все студенты в курсе, и дать вам их ID и счетчик другого классы, которые у них есть. Мой синтаксис может быть неправильным, поскольку я набираю это из памяти.

+0

Кроме того, вы можете добавить предложение 'HAVING', как в ответе Джастина, если вам нужно также фильтровать на основе подсчета. Это будет идти после предложения GROUP BY. – Jeff

Смежные вопросы