2014-09-20 4 views
-2

작동하지 않음은 이미이 쿼리를 만들기 위해 몇 가지 질문,하지만 여전히 작동하지 :SQL 쿼리 작업과

SELECT 
    l.inlog AS inlog, 
    u.naam AS naam, 
    SUM(o.status='afgewerkt') AS oefn, 
    SUM(b.status='afgewerkt') AS begripn 
FROM 
    users AS u 
LEFT JOIN  
    llntoets AS l ON (u.inlog = l.inlog) 
LEFT JOIN  
    oefeningen AS o ON (u.inlog = o.speler AND o.btijd between '$bdatum' AND '$edatum') 
LEFT JOIN  
    begrippen AS b ON (u.inlog = b.speler AND b.btijd between '$bdatum' AND '$edatum') 
WHERE 
    code = '$code' 
GROUP BY 
    l.inlog 

동안에도 begrippen 내가 첫 번째 코드를 입력 oefn 완벽한 수를 표시하면 두 테이블이 정확히 동일한 구조는, 그것이 있어야했다 oefeningen 내가 두 번째 코드를 가지고가는 경우에, 그것은 완전히있는 숫자를 만든다 잘못된. 누군가 나를 도와 줄 수 있습니까?

+0

당신은 당신이 여기 사람들이이 문제에 당신을 도울하려는 경우 귀하의 질문에 좀 더 이해할 수 있도록해야한다. – Abhi

답변

0

조인하는 각 레코드와 일치하는 레코드가 두 개 이상있는 테이블에 조인하면 다른 조인의 레코드가 복제됩니다.

당신은 다른 테이블에서 레코드를 계산하는 서브 쿼리를 사용할 수 있습니다

select 
    l.inlog AS inlog, 
    u.naam AS naam, 
    (
    select count(*) 
    from oefeningen 
    where 
     speler = u.inlog and 
     btijd between '$bdatum' and '$edatum' and 
     status = 'afgewerkt' 
) as oefn, 
    (
    select count(*) 
    from begrippen 
    where 
     speler = u.inlog and 
     btijd between '$bdatum' and '$edatum' and 
     status = 'afgewerkt' 
) as begripn 
from 
    users as u 
    left join llntoets as l on (u.inlog = l.inlog) 
where 
    code = '$code' 
group by 
    l.inlog 
+0

고마워요, 이것은 실제로 효과가있었습니다. :) (아직 투표 할 수 없습니다 ...) – Thempower