2016-06-24 3 views
2

테이블 연락처와 테이블 회사가 두 개 있습니다. 테이블 연락처에는 company id (1-4) 이라는 4 개의 열이 있습니다.이 열에는 해당 인물이 연관된 회사 ID가 있습니다. 이제 문제는 대신 ID의 나는 다음과 같은 쿼리를 시도 회사 이름을 표시 할 수 있도록하려는 것입니다하지만 그것은 단지 나에게 마지막 행의 값을 제공 result of the query 다음과 같이모든 ID를 다른 테이블의 값으로 바꾸는 테이블

select * 
from contact as ct 
join company as cy1 on cy1.Company_id = ct.Company_id1 
join company as cy2 on cy2.Company_id = ct.Company_id2 
join company as cy3 on cy3.Company_id = ct.Company_id2 
join company as cy4 on cy4.Company_id = ct.Company_id4 


$stmt = sqlsrv_query($conn, $sql , array(), array("Scrollable" => 'static')); 
if($stmt === false) { 
    die(print_r(sqlsrv_errors(), true)); 
} 
$stmtcount = sqlsrv_num_rows($stmt); 
if ($stmtcount > 0) { 
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { 
            $id = $row['Contact_id']; 
            $fname = $row['Firstname']; 
            $lname = $row['Lastname'];          
            $company1=$row['Company']; 
            $company2=$row['Company']; 
            $company3=$row['Company']; 
            $company4=$row['Company']; 



echo '<tr>'; 
echo "<td> <a class='notice' href='details.php?id=" . $id . " '>" .$row['Abbreviation'].'&nbsp'. $row['Firstname'] . "</a> </td>"; 

echo '<td>'.$lname.'</td>'; 
echo '<td>'.$company1.'</td>'; 
echo '<td>'.$company2.'</td>'; 
echo '<td>'.$company3.'</td>'; 
echo '<td>'.$company4.'</td>'; 

echo '</tr>'; 

결과는 테이블 구조

and here's the database table

+0

당신은 mysql과 sql-server 모두 태그를 붙였습니다. – dbmitch

+0

죄송합니다. 해당 SQL –

+0

@a_horse_with_no_name sql-server srry 태그에 추가했습니다. –

답변

0

컬럼 alias 대신 select * 사용보십시오

select ct.*, 
     cy1.name as name1, 
     cy2.name as name2, 
     cy3.name as name3, 
     cy4.name as name4 
from contact ct join 
    company cy1 
    on cy1.Company_id = ct.Company_id1 join 
    company 
    cy2 
    on cy2.Company_id = ct.Company_id2 join 
    company cy3 
    on cy3.Company_id = ct.Company_id2 join 
    company cy4 
    on cy4.Company_id = ct.Company_id4; 

여러 열이 동일한 이름을 갖는 경우 쿼리는 임의로 하나의 값을 선택합니다.

+0

메신저 조금 혼란 스러울 수 있습니다. ct. *를 선택하는 이유를 설명해 주시겠습니까? cy1.name과 동일한 ct라는 테이블이없는 경우 name1 –

+0

@ 로치 안드레이 귄 다마. . . 'ct'는 테이블 별칭입니다. 'from' 절에 정의 된 첫 번째 별칭입니다. –

관련 문제