2013-02-18 43 views
0

我的當前表是從數據庫中獲取內容,但是我想合併這些行,以便所有房間首選項都顯示在一行中而不是多個。我怎麼能這樣做呢?結果,下面的表格只有兩行。使用SQL將行元素分組到一列使用

房間首選信息正在從推出ts_roompref

enter image description here

這是到目前爲止我的代碼:

$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>'; 
+0

試過這樣的:「GROUP BY ts_request.day_id」到底是什麼? – vikingmaster 2013-02-18 23:01:17

+0

@Jari它不起作用 – methuselah 2013-02-18 23:02:27

+0

這個問題正在導致'echo $ row ['room_id'];'被回顯 – methuselah 2013-02-18 23:03:46

回答

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'] 
    } 
} 

...粗糙,但你明白了。

1

如果你想在SQL中完成它,你不能在room_preference和GROUP BY其他4個字段上做GROUP_CONCAT嗎?