2017-01-03 5 views
1

私は2つのテーブルCalls & Vehiclesを持っています。 Callsには、電話番号と住所があります。 Vehiclesには、電話番号と車両番号があります。 (複数の車両が通話可能)。私はすべてのコールのリストを表示し、どのユニットがどのコールにあるかを示したいと思います。テーブルを1つのリストにまとめる

のような何か:

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つだけを取得できますか?

+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

関連する問題