2013-02-18 2 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

Пробовал smth вроде: 'GROUP BY ts_request.day_id' в конце? – vikingmaster

+0

@Jari Не работает – methuselah

+0

Проблема возникает там, где 'echo $ row ['room_id'];' is echoed – methuselah

ответ

1

Ну, я предполагаю, что вы пытаетесь сделать это в SQL, но если вы хотите сделать это в вашем PHP вы могли цикл над строки, отслеживающие изменения в модульном коде. Pseudo code что-то вроде ...

$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, вы не можете сделать GROUP_CONCAT на room_preference и GROUP BY по другим 4 полям?

Смежные вопросы