2013-08-02 1 views
1

나는 무들 (2.4) 데이터베이스를 기반으로하는 간단한 앱을 만들고있다. db는 mysql입니다. 5.1.69다른 조건에서 동일한 테이블을 여러 번 결합하는 것이 맞습니까?

이 달에 부여 된 모든 certs와 cert 및 cert 자체를 가진 사용자에 대한 모든 관련 정보를 찾아야합니다.

약자로 내 SQL은 다음과 같습니다

SELECT u.lastname, u.firstname, ln.data, lt.data, course.fullname, 
    c.printhours, from_unixtime(i.timecreated) AS issued, 
    substring_index(c.customtext, ' ', -1) AS approval 
FROM mdl_certificate_issues AS i 
INNER JOIN mdl_certificate AS c ON i.certificateid = c.id 
INNER JOIN mdl_user AS u on i.userid = u.id 
INNER JOIN mdl_course AS course ON c.course = course.id 
INNER JOIN mdl_user_info_data AS ln ON i.userid = ln.userid AND ln.fieldid = 1 
INNER JOIN mdl_user_info_data AS lt ON i.userid = lt.userid AND lt.fieldid = 2 
WHERE i.timecreated >= unix_timestamp('2013-07-01') 
    AND i.timecreated < unix_timestamp('2013-08-01') 

내가 (LT 및 LN로) 두 번 같은 테이블 (mdl_user_info_data)에 가입하고 같은 열을 사용하지만, fieldID가에만 다른 것이 사실이에요 무엇이 나를 괴롭히는가. 그것은 하나의 하위 쿼리에서이를 수행 할 수 있어야하고 select에 올바른 정보를 가져올 수 있어야한다고 생각합니다. 그러나이를 수행하는 방법을 파악할 수 없거나 올바른 방법일지도 모릅니다.

답변

2

접근 방식에 문제가 없습니다. 개인적으로 나는 항상 서브 쿼리를 통해 조인을 선택한다. 아마도 "ln"과 "lt"보다 더 의미있는 별칭을 선택할 것이다.

+0

여러 가지 방법이있을 때 몇 가지 이유로 간단한 SQL 스타일의 조언을 찾기가 어려울 것으로 보인다. 뭔가 - 정말 고마워. –

+0

조인 대 서브 쿼리는 일반적으로 스타일보다는 최적화 질문에 더 가깝습니다. 대부분의 DBMS는 요즘 서브 쿼리를 조인 (join)으로 변환 할 것이다. –

관련 문제