2011-04-06 4 views
1

숙제 중 하나에 대한 특정 요구 사항에 문제가 있습니다. 나는 학생 명단을 작성하고 12 학점 이상의 모든 학생들을 인쇄해야합니다. 학점 시간은 별도의 테이블에 저장되며 세 번째 테이블 을 통해 참조됩니다. 학생 테이블, 시간이있는 클래스 테이블 및 학생 ID와 일치하는 등록 된 테이블이 코스 IDDelphi에서 MySQL 결과 필터링

다음으로 그룹화 된 SUM 집계를 사용했습니다. 테이블에서 나온 이름과 모든 것이 훌륭하게 작동하지만 12 시간 미만의 사람들을 필터링하는 방법을 이해하지 못합니다. SQL은 쿼리가 완료 될 때까지 각 사람이 복용하는 시간을 모르기 때문입니다. .

내 문자열은 다음과 같습니다


'SELECT Students.Fname, SUM(Classes.Crhrs) AS Credits 
FROM Students, Classes, Enrolled 
WHERE Students.ID = Enrolled.StudentID AND Classes.ID = Enrolled.CourseID 
GROUP BY Students.Fname;' 

그것은 잘 작동하고 델파이 프로젝트에서 그리드를 보여 주지만 결과를 필터링 여기에서 어디로 모르겠어요, 각 조회 실행이 이전 조회를 h 제하기 때.입니다.

+0

테이블에 가입하는 데 사용한 SQL 구문은 작동하지만 " 암시 적 "조인. 명시 적 조인 구문도 있습니다. http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins –

답변

8

숙제 연습이므로 매우 짧은 답변을 드리겠습니다. HAVING에 대한 설명서를 찾아보십시오.

+0

방향을 알려 주셔서 대단히 감사합니다. 그게 제가 찾고있는 것입니다 – Golem21

2

Martijn이 제시 한대로 원하는 결과를 SQL에서 직접 얻는 것 외에도 Delphi 데이터 세트는 "클라이언트 측"에서도 데이터를 필터링하는 방법을 가지고 있습니다. Filter 속성과 OnFilter 레코드를 확인하십시오.

어쨌든 적절한 SQL을 사용하여 데이터베이스 쪽에서 가장 좋은 "필터"를 적용한 다음 클라이언트 측 "필터"만 사용하여 이미 얻은 데이터 집합에 다른보기를 허용하는 것이 더 좋습니다. 따라서 동일한 데이터를 다시 쿼리하지 않아도 일부 데이터베이스 리소스와 대역폭을 절약 할 수 있습니다 (서버의 데이터가 한동안 변경되지 않는 한 ...)

+0

나는 미래의 프로젝트를 위해 그것을 조사 할 것입니다. 정말이 숙제는 매우 혼란스럽고 Embarcadero의 Delphi 옵션을 사용하는 대신 SQL 문을 사용하는 것이 훨씬 편합니다. 당신의 도움을 주셔서 대단히 감사합니다. – Golem21