我当前的表是从这样的数据库中获取内容,但我希望将这些行组合在一起,以便所有的Room Preference显示在一行而不是多行。我该怎么做呢?因此,下表只有两行。
从 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>';
答案 0 :(得分: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 :(得分:1)
如果你想在SQL中这样做,你不能在room_preference
和GROUP BY上做其他4个字段的GROUP_CONCAT吗?