0

私の現在のテーブルはこのようにデータベースからコンテンツをフェッチしていますが、すべての部屋の設定が複数ではなく1つの行に表示されるように、行を結合したいと思います。どうすればこれを行うことができますか?結果として、以下の表には2行しかありません。

部屋設定情報はts_roomprefから推測されています。

ここに画像の説明を入力してください

これまでの私のコードは次のとおりです。

    $sql = "SELECT 
            *
    FROM ts_request
    INNER JOIN ts_day
    ON ts_request.day_id = ts_day.id
    INNER JOIN ts_period
    ON ts_request.period_id = ts_period.id
    INNER JOIN ts_allocation
    ON ts_request.id = ts_allocation.request_id
    INNER JOIN ts_roompref
    ON ts_request.id = ts_roompref.request_id
    WHERE ts_request.round=:round
    AND ts_request.dept_id=:dept
    ORDER BY ts_request.module_id ASC";
    }
    $stm = $pdo->prepare( $sql );
    $stm->execute( array( ':round' => 'P', ':dept' => $loggedin_id  ) );
    $rows = $stm->fetchAll();   

        foreach ($rows as $row) 
    {               
    echo '<tr align="center">'; 
    echo '<td>'.$row['module_id'].'</td>';
    echo '<td>'.$row['day'].'</td>';    
    echo '<td>'.$row['period'].'</td>';
    echo '<td>';
    if ($row['room_id']=="0")
    {
    echo "Any";
    }
    else
    {
    echo $row['room_id'];
    }
    echo '</td>';           
    echo '<td>'.$row['status'].'</td>';
    echo '</tr>';
4

2 に答える 2

1

SQL で実行しようとしていると思いますが、PHP で実行する場合は、行をループしてモジュール コードの変更を監視できます。擬似コードのようなもの...

$newrows = array()
$tmpCode = ""
foreach $rows as $row
   if $tmpCode != $row['module_code'] {
       $tmpCode = $row['module_code']

       $newrows[] = $row 
   } else {
       $newrows[count($newrows) - 1]['room_preference'] .= $row['room_preference']
   }
}

...大まかですが、アイデアはわかります。

于 2013-02-18T23:06:41.457 に答える
1

SQLでやりたいなら、GROUP_CONCATをonにしてroom_preference、他の4つのフィールドをGROUP BYできませんか?

于 2013-02-18T23:36:06.443 に答える