2011-11-08 1 views
0

나는 PHP 세계를 통해 나아가고 있지만 여전히 내 발을 찾고 있습니다. 나는 mysql에서 필요로하는 것을 수집하기 위해 훌륭하게 작동하는 쿼리를 작성했지만, 단지 WHERE 조건으로 작업 할 수 없다. 어떤 도움을 많이 주시면 감사하겠습니다!3 테이블 LEFT JOIN 쿼리에 WHERE 조건을 추가 하시겠습니까?

SELECT foo.*, users.name, SUM(bar.amt) Total FROM foo 
    LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id 
    LIMIT 16 GROUP BY foo.id" 

그리고 여기에 내가 WHERE 조건을 추가하는 작업을해야 무엇을 생각하지만 작동하지 않습니다 ...

SELECT foo.*, users.name, SUM(bar.amt) Total FROM foo 
    WHERE foo.category = $var LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id LIMIT 16 GROUP BY foo.id" 

모든 모든 :

다음은 WHERE 조건없이 내 작업 쿼리 제안은 환영합니다, 고마워요 !!

+0

전에 그것을 사용하려는 경우에도 마찬가지입니다. 이 참조를 확인하십시오 -> http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php – Rikesh

+0

은 독자가 검색어를 볼 수 있도록 긴 줄을 나누는 아이디어를 가지고 있습니까? 단지 호기심. –

답변

3

아주 간단 : 모든 WHERE 조건은 모두 JOIN 뒤에 있어야합니다.

+0

빠른 응답에 감사드립니다. 나는 LIMIT 조건 바로 전에 LIMIT와 GROUP BY 사이에 놓기를 시도했다. 그리고 쿼리의 끝 부분에 여전히 운이 없다. – Josiah

+0

기다려라, 그렇지 않았다. Yahia와 마찬가지로 나는 그것을 테스트했을 때 잘못 입력했습니다. 고마워요! – Josiah

2

모든 조인 된 테이블 뒤에 WHERE 절을 넣어야합니다. 따라서

SELECT foo.*, users.name, SUM(bar.amt) Total 
FROM foo 
    LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id 
WHERE foo.category = $var 
GROUP BY foo.id 
LIMIT 16; 

아마도 LIMIT 절이 마지막 일 것입니다.

+0

그래, 지금 모두 정렬, 고마워요! – Josiah

0

사용

SELECT 
foo.*, 
users.name, 
SUM(bar.amt) Total 
FROM foo 
LEFT JOIN bar ON foo.id = bar.foo_id 
LEFT JOIN users ON foo.foo_owner_id = users.id 
WHERE foo.category = $var 
GROUP BY foo.id 
LIMIT 16 
+0

그 중 하나입니다, 정말 고마워요! – Josiah

+0

당신은 환영합니다 :-) 어떤 유용한 대답이라도 받아 들여지면 upvote/mark를 잊지 마시기 바랍니다! – Yahia

0

당신이 절은 후 조인 경우 다음 항상 사용 왼쪽을 사용 또는 오른쪽으로 가입되어있다.

SELECT foo.*, users.name, SUM(bar.amt) Total 
    FROM foo 
    LEFT JOIN bar ON foo.id = bar.foo_id 
    LEFT JOIN users ON foo.foo_owner_id = users.id 
    WHERE foo.category = $var 
    GROUP BY foo.id 
    LIMIT 16; 

는 유 ID로 순서 등이 조건은`join` 후 문장의 끝에 있어야한다 LIMIT