2011-11-06 4 views
0

코스에 등록 할 수있는 사람 수에 제한이있는 데이터베이스를 설정하고 있습니다. 내 코스 테이블에는 int를 보유하는 최대 열이 있고 등록 된 테이블에는 등록 된 모든 사람들이 해당 코스를 보유합니다. 내 웹 페이지는 코스 테이블에 등록 된 테이블의 등록 된 사람 수인 <의 최대 수를 표시해야합니다. 내 현재 쿼리를 heres.두 테이블의 행 수를 제한하고 표시된 정보를 제한하려는 SQL count()

SELECT course.time,COUNT(registered.time),registered.maximum FROM course 
JOIN (registered) 
ON course.type = 'computing' OR 
(registered.type = 'computing' AND course.time = registered.time) 
GROUP BY course.time 
HAVING COUNT(registered.time) < course.maximum 

이의 문제는 관계없이 수업 시간에 등록 된 모든 사람을 계산, 그래서 다른 시간에 등록 이명이있는 경우 여전히마다 등록 이명을 계산합니다.

희망 설명해 주셨습니다. 누군가 도와 드릴 수 있기를 바랍니다. 감사합니다.

답변

0

registered.maximumcourse.maximum이있는 이유가 불분명합니다. 또한 코드를 기반으로 추측 할 필요없이 실제 테이블 구조를 알고 있다면 질문에 쉽게 답할 수 있습니다. 그러나 여기 간다 : 당신이 그렇지 않으면 구문 오류 때문에

SELECT course.time, COUNT(registered.time), registered.maximum 
FROM course 
    JOIN registered 
    ON course.type = registered.type 
    AND course.time = registered.time 
WHERE course.type = 'computing' 
GROUP BY course.time, registered.maximum 
HAVING COUNT(registered.time) < course.maximum 

는 또한, registered.maximum에 의해 그룹을했다.

마지막으로, 조인을 유형으로 변경 한 다음 WHERE 절에 추가했습니다. 나에게 그것은 때때로 더 느릴지라도 항상 더 의미가 있습니다. 내 관점에서 JOIN 절은 조인을위한 것이고 WHERE 절은 필터링을위한 것입니다.

업데이트 : 또한 등록 아무도과 과정을 얻을 수 있습니다 : registered.maximum에 대한

SELECT course.time, COUNT(registered.time), course.maximum 
FROM course 
    LEFT OUTER JOIN registered 
    ON course.type = registered.type 
    AND course.time = registered.time 
WHERE course.type = 'computing' 
GROUP BY course.time, course.maximum 
HAVING COUNT(registered.time) < course.maximum 
+0

미안 내 실수는, course.maximum을 읽어야합니다. 방금 쿼리를 작성했지만 아무도 등록하지 않으면 사용 가능한 슬롯이 표시되지 않습니다. 테이블 레이아웃은 코스입니다 : 필드는 시간/유형/최대 및 등록 : 필드는 유형/시간입니다 – James

+0

그래도 다른 문제가 있습니다. 아무도 가입하지 않은 코스를 얻으려면 외부 참여가 필요합니다. 나는 그것을 내 대답에 추가 할 것이다. – MJB

관련 문제