2010-04-14 2 views
0

필자는 조인 할 테이블이 3 개 있습니다. 계약 테이블은 주 테이블이고, '작업'테이블과 '회사'테이블은 계약 테이블과 연결할 수있는 추가 정보입니다.다중 왼쪽 조인, PHP로 출력하는 방법

그래서, 내가 원하기 때문에 내 모든 '계약'테이블에서 항목, 그리고 '작업'하고있는 경우 '회사'데이터는,이 같은 쿼리를 .... 쓴

$sql = "SELECT * FROM contracts 
     LEFT JOIN jobs ON contracts.job_id = jobs.id 
     LEFT JOIN companies ON contracts.company_id = companies.id 
     ORDER BY contracts.end_date"; 

이제 PHP로 어떻게 출력 할 수 있습니까? 나는 이것을 시도했다. 그러나 정의되지 않은 오류가 계속 나왔다. "알림 : 정의되지 않은 색인 : contracts.id"...

$sql_result = mysql_query($sql,$connection) or die ("Fail."); 

if(mysql_num_rows($sql_result) > 0){ 

    while($row = mysql_fetch_array($sql_result)) 
    { 
     $contract_id = stripslashes($row['contracts.id']); 
     $job_number = stripslashes($row['jobs.job_number']); 
     $company_name = stripslashes($row['companies.name']); 
    ?> 
     <tr id="<?=$contract_id?>"> 
      <td><?=$job_number?></td> 
      <td><?=$company_name?></td> 
     </tr> 
    <? 
    } 
}else{ 
    echo "No records found"; 
} 

어떤 도움을 주시면 감사하겠습니다.

+0

"별칭"을 사용하면 데이터를 간단하게 가져올 수 있습니다. – Hanseh

답변

1

열 이름에는 이와 같이 접두어가 붙지 않으며 각 테이블에 "id"라는 열이 있으면 문제가 발생할 수 있습니다. "select *"를 사용하지 않고 반환 할 열을 명시 적으로 식별해야하며 접두어가없는 접미어로 열을 검색하면됩니다 (예 : $row['job_number']).

+0

은 매력처럼 작동합니다. 고맙습니다! – uberdanzik

0

아래에서 문제가 해결 될 것입니다.

$sql = "SELECT contracts.id AS contract_id, jobs.job_number, companies.name FROM contracts 
     LEFT JOIN jobs ON contracts.job_id = jobs.id 
     LEFT JOIN companies ON contracts.company_id = companies.id 
     ORDER BY contracts.end_date"; 

귀하의 문제는 당신이 MySQL의 as 절을 사용하여 별칭으로 그들을 선택해야하는 이유는 당신이 분야 id 두 개의 테이블을 사용하고있는 사실에 realted 될 가능성이 높습니다.

필드에 대한 명명 규칙을 사용하고이를 준수해야 할 수도 있습니다. 예를 들어, Hungarian Notation의 이론을 확인하십시오. 이렇게하면 arrissing에서 발생하는 문제를 방지 할 수 있습니다.

+0

접두어로 된 이름을 사용하여 열을 검색하는 것과 관련된 문제를 완전히 해결하지는 못합니다. –