2012-02-03 3 views
0

'올바른'테이블에서 선택된 모든 필드는 분명히 공백으로 반환된다는 점만 제외하면 예상대로 작동하는 조인이 있습니다.MySQL 조인은 하나의 테이블에서 선택할 수 없습니다.

SELECT score.recipient, score.amount, u.* FROM score 
LEFT JOIN `users` AS u ON score.recipient = u.id AND u.team_id = ? 
WHERE UNIX_TIMESTAMP(score.date) > ? 

실제로 전체 users 테이블이 필요하지는 않지만 users.email 만 필요하지만 필드는 작동하지 않습니다. 결과 세트는 다음과 같습니다 (샘플).

[0] => stdClass Object ([recipient] => 1 [amount] => 1 [id] => [fname] => [lname] => [nickname] => [email] => [phone] => [reg_key] =>) 
[1] => stdClass Object ([recipient] => 103 [amount] => -1 [id] => [fname] => [lname] => [nickname] => [email] => [phone] => [reg_key] =>) 

실제로 나열된 모든 필드가 채워집니다.

도움이 될 것입니다. 나는 잃어 버렸다.

+1

PHP 측에서 SQL 실행을 위해 무엇을 사용하고 있습니까? PHP 문제처럼 보입니다. MySQL을위한 것이 아닙니다. 오, 그리고 JOIN이 아닌 LEFT join이 필요하신가요? 그것은 역시 문제가 될 수 있습니다. – Aurimas

+0

흥미 롭다 - 나는 Codeigniter와 그 DB 클래스를 사용하고있다. 그러나 PHP 자체는 다소 단순하다.'$ query = $ this-> db-> query ($ sql, array ($ var1, $ var2))' . 결과 세트는 공 i 필드 이외에는 완전히 정확합니다. – Gavin

+0

오, JOIN 유형과 관련하여 - 확실하지 않습니다. 하지만 JOIN으로 변경하면 결과 세트가 비어 있습니다. – Gavin

답변

2

왼쪽 조인을 내부 조인으로 바꾸면 조인 조건/where 절이 깨져 빈 결과 집합이 반환됩니다. 그 다음 team_id의 값을보고, 그렇다면

SELECT score.recipient, score.amount, u.* FROM score 
LEFT JOIN `users` AS u ON score.recipient = u.id 

/당신이 얻을 score.date - 나는 내기 : 그것은 모든 값을 반환하는 경우

이 (바인드 변수와 조건없이) 시도 및 참조 테이블에 존재하지 않는 바인드 값의 조합을 사용하고 있습니다.

+1

동의 함 - LEFT JOIN이 "결합 가능한"일치 항목을 식별하지 않고 u. * 필드에 대해 NULL을 반환하므로 u. * 값이 비어 있습니다. – Aurimas

+0

아, 너 죽었어. 내가 당신을 도망 쳤을 때 그 문제를 일으킨 것은 바인딩 값이라는 것이 증명되었습니다. team_id 및 score.date에 전달한 값은 null입니다. 내 목적에 대한 어리석은 감시. – Gavin

관련 문제