2017-01-03 2 views
1

두 개의 테이블 Calls & Vehicles이 있습니다. Calls에는 전화 번호와 주소가 있습니다. Vehicles에는 전화 번호와 차량 번호가 있습니다. 여러 대의 차량을 호출 할 수 있습니다. 나는 모든 전화 목록을 보여주고 어떤 전화가 어떤 전화에 있는지 보여주고 싶다. 같은테이블을 단일 목록으로 조인

뭔가 :

Call Address  Vehicles 
1  123 Main St A1, B3, C2 
2  124 Main St C3 
3  125 Main St A2, A3 

코드 : 나는이 작업을 수행 할 때

$query = 'select calls.call, calls.address, vehicles.vehicle from calls left join vehicles on calls.call = vehicles.call'; 
$select = odbc_exec($conn, $query); 
$while ($data = odbc_fetch_array($select)){ 

echo"<table>"; 
echo"<tr>"; 
echo"<td>".$data['call']."</td>"; 
echo"<td>".$data['address']."</td>"; 
echo"<td>".$data['vehicle']."</td>"; 
echo"</tr>"; 
echo"</table>"; 
} 

나는 여러 번 나열된 여러 차량 여러 통화를 얻을. 쉼표로 구분 된 목록에있는 차량으로 각 통화 중 하나만받을 수 있습니까?

+1

어떤 데이터베이스를 사용하고 있습니까? MySQL에서는 이것이'GROUP_CONCAT'입니다. – Barmar

+0

왜 '차량'에 가입하고 계십니까? 당신은 그 테이블에서 아무 것도 사용하지 않고 있습니다. – Barmar

+0

데이터베이스는 ctreeACE SQL입니다. 내가 GROUP_CONCAT를 시도했지만 ctreeACE SQL과 함께 작동하지 않는 것 같습니다. – Hodge

답변

1

ctreeACE는 GROUP_CONCAT 함수가 없으므로 PHP에서 수행하십시오. 먼저 키가 호출 번호 인 연관 배열을 만듭니다.

$results = array(); 
$query = 'select calls.call, calls.address, vehicles.vehicle from calls left join vehicles on calls.call = vehicles.call'; 
$select = odbc_exec($conn, $query); 
while ($data = odbc_fetch_array($select)){ 
    $c = $data['call']; 
    if (!isset($results[$c])) { 
     $results[$c] = array('call' => $c, 'address' => $data['address'], 'vehicles' => array()); 
    } 
    if ($data['vehicle']) { // Don't append NULL vehicle that LEFT JOIN might produce if there's no matching row 
     $results[$c]['vehicles'][] = $data['vehicle']; 
    } 
} 

그런 다음 루프를 통해 테이블을 생성하십시오.

echo "<table>"; 
foreach ($results as $call) { 
    echo "<tr>"; 
    echo "<td>{$call['call']}</td>"; 
    echo "<td>{$call['address']}</td>"; 
    echo "<td>" . implode(', ', $call['vehicles']) . "</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 

루프 내에서 새 테이블을 시작하면 안되며 루프 주위에 있어야합니다.

+0

도움 주셔서 감사합니다. 코드를 직접 복사 했으므로 페이지가 표시되지 않습니다. 내가 다른 것을 놓치고 있는지 확실하지 않습니다. – Hodge

+0

서버 로그에 오류가 있습니까? – Barmar

+0

'$ '는 오타였습니다. – Barmar