2012-01-30 6 views
1

하나의 조건에서 하나의 테이블을 다른 테이블에 조인하려고 시도 중입니다. 그런 다음 다른 조건에서 다른 테이블에 테이블을 조인하려고합니다. 이것을 할 수 있습니까? 그렇다면 올바른 구문은 무엇입니까? 나는 이것을 시도했지만 작동하지 않습니다 :Mysql : 하나 이상의 'where'로 3 개의 테이블을 결합 하시겠습니까?

$check = $members->prepare("select users.fname, users.lname, groups.groupid, attributes.max 
    from users 
    JOIN groups 
     on users.user_id = groups.userid 
    where groups.userid = ? 
    LEFT JOIN attributes 
     on users.user_id = attributes.userid 
    where attributes.groupid = ?"); 
$check->bind_param('ss', $_SESSION['token'][1], $which_group); 
$check->execute(); 

건배.

+0

WHERE 절은 하나만 사용할 수 있지만 여러 조건을 넣을 수 있습니다. 특히 JOIN 컨텍스트에서 쓰는 방법을 사용하는 데이터베이스의 설명서를 참조하십시오. – hakre

답변

2

그냥 사용 ........ AND

$check = $members->prepare("select users.fname, users.lname, groups.groupid, attributes.max 
    FROM users 
    JOIN groups 
     ON users.user_id = groups.userid 
     AND groups.userid = ? 
    LEFT JOIN attributes 
     ON users.user_id = attributes.userid 
     AND attributes.groupid = ? 
2

attributes.groupid의 테스트는 LEFT JOIN의 조인 조건의 일부 여야합니다. WHERE 절에서이 조건을 테스트하면 LEFT JOIN이 INNER JOIN 인 것처럼 동작합니다.

select users.fname, users.lname, groups.groupid, attributes.max 
    from users 
     JOIN groups 
      on users.user_id = groups.userid 
     LEFT JOIN attributes 
      on users.user_id = attributes.userid 
       and attributes.groupid = ? 
    where groups.userid = ? 
0

당신이 언급하고있는 조건이 조인 된 테이블에 관련된 어떤 방식으로 문자와없는 경우에 그들을 결합 하나의 조항.

select users.fname, users.lname, groups.groupid, attributes.max 
from users 
    JOIN groups 
     on users.user_id = groups.userid 
    LEFT JOIN attributes 
     on users.user_id = attributes.userid 
where groups.userid = ? and attributes.groupid = ? 
관련 문제