2012-09-01 4 views
3

나는 복잡한 데이터베이스 관계를 가지고있다. 이론적으로는 좋은 디자인이라고 생각하지만, 이제는로드 블록이 가능한 한 적은 수의 쿼리로 데이터를 가져오고 있습니다. 다음은 데이터베이스 구조 내가 가지고있다 :조인을 사용하는 mysql 고유 쿼리

학생 테이블 : 이름, 전화 번호, 이메일과 같은 일부 필드 등

students_requirements 테이블 (매핑 테이블) : student_id, requirement_id, 날짜

요구 사항 표 (요구 사항 유형에 속하는) : 아이디,,requirement_type_id,

requirement_type 테이블 이름 (많은 요구 사항이 있습니다) : 그래서 여기에 ID, 유형, 이름, 좋아

, 그것은 사용하는 방법의 예입니다. 요구 사항 유형을 구축 할 수 있습니다. 예는 과제와 같습니다. 각 과제에는 여러 가지 요구 사항이 있습니다. 학생은 특정 과제에 대한 요구 사항을 전달할 수는 있지만 모든 과제에 대해 요구 사항이 반드시 전달되는 것은 아닙니다. 그래서 저는 모든 과제를 학생이 묻고 싶습니다. 그래서 시스템에 입력 된 50 개의 과제가 있고, jon smith가 과제 중 4 개에 대한 요구 사항을 입력했다고 가정 해보십시오. 나는 jon smith id가 질문을하여 그가 요구 사항을 입력 한 모든 과제를 찾고 싶습니다.

나는 그것이 의미가 있기를 바랍니다. 내 유일한 추측은 참여를 사용하는 것입니다,하지만 솔직히 말해서, 저는 그것들을 잘 이해하지 못합니다.

도움이 될 것입니다!

답변

2

이 시도 : 나는 몇 가지를 생각 했어 같은 테이블 이름이 정확

SELECT * FROM student_table, students_requirements_table, 
requirements_table, requirement_type_table 
WHERE student_table.name = "Jon Smith" 
AND students_requirements_table.id = student_table.id 
AND requirements_table.id = students_requirements_table.requirement_id 
AND requirement_type_table.id = requirements_table.requirement_type_id; 

확인하는 것이하고 있습니다 (예 :이 테이블 이름의 일부에 밑줄 인 등) 위의 모든 내용은 실제로 하나의 긴 줄이어야합니다 (하지만이 페이지에서는 읽을 수 없으므로 여러 줄로 나누었습니다).

현재 램프 리그 설치가 없으므로 테스트를 위해 모의을 할 수 없으며 MySQL 조인을 작성해야하기 때문에 오랜 시간이 걸렸지 만 이것이 올바른 것이라고 생각합니다. 선로.

LEFT JOIN을 사용해야하는 경우페이지를 참조하십시오.

+2

MySQL은 모든 것이 한 줄에 있어야하는 것은 아닙니다. 그리고 조롱 할 장소가 필요하면 www.sqlfiddle.com을 사용하십시오. – Barmar

+0

이봐 요, 내가이 일로 너에게 다시 돌아 오는 걸 배웠다. 나는 당신의 도움이 눈치 채지 못하게하고 싶지 않았습니다. 이 쿼리는 실제로 나를 위해 작동했습니다. 내 문제는 이제 PHP를 통해 반환 된 정보를 처리합니다. 아주 간단하게 NOt :) – Sean

관련 문제