我有sql数据结果集,其记录如下
id | name | hobbies
------------------------------------
1 | RAVI | PLAYING CRICKET
------------------------------------
1 | RAVI | LISTENING MUSIC
------------------------------------
2 | REENA | BADMINTON
------------------------------------
我使用html表在视图中显示这些数据。 虽然我的要求是,我想显示如下
id | name | hobbies
------------------------------------
1 | RAVI | PLAYING CRICKET
| | LISTENING MUSIC
------------------------------------
2 | REENA | BADMINTON
------------------------------------
意思是我想将id为1的记录显示为一个<td>
我使用php foreach
循环来显示结果。
我怎样才能做到这一点?
我当前的代码如下所示,结果与我的第一个表相同,而我希望我的视图在第二个表中。
<table class="table table-striped">
<tr >
<th>ID</th>
<th>Name</th>
<th>Hobbies</th>
</tr>
foreach($result as $row)
{
echo "<tr>
<td>".$row->id."</td>
<td>". $row->name."</td>
<td>". $row->hobbies."</td>
</tr>";
}
</table>
答案 0 :(得分:6)
快速解决此问题的方法是修改MySQL查询以使用GROUP_CONCAT(hobbies)
将所有用户的爱好组合在一起。查询看起来像:
SELECT
id, name, GROUP_CONCAT(hobbies) AS hobbies
FROM
your_table
GROUP BY
id
这会将所有用户的爱好分组到逗号分隔的列表中。要显示它,您可以使用PHP的explode()
并迭代它:
foreach ($results as $row) {
echo '<tr>';
echo '<td>' . $row->id . '</td>';
echo '<td>' . $row->name . '</td>';
echo '<td>';
$hobbies = explode(',', $row->hobbies);
foreach ($hobbies as $hobby) {
// output each hobby and decorate/separate them however you'd like
echo $hobby . '<br />';
}
echo '</td>';
echo '</tr>';
}
如果你不想要内圈(或结束爱好的结尾<br />
),你可以改用str_replace()
:
echo str_replace(',', '<br />', $result['hobbies']);
答案 1 :(得分:0)
这篇文章可以帮助您:Concatenate many rows into a single text string?
只需将,
替换为</br>
。
答案 2 :(得分:0)
在每次迭代中,您必须保存最后一个ID,在下一次迭代中,您必须检查它的值是否已更改。像这样:
$res = $this->db->query('.....');
$last_ID = '';
foreach ($res->result() as $row) {
if ($row->id != $last_ID) {
if (strlen($last_ID)>0) echo '</td></tr>';
echo '<tr>';
echo '<td>$row->id</td>';
echo '<td>$row->name</td>';
echo '<td>$row->hobbies';
} else {
echo '<br />'.$row->hobbies;
}
$last_ID = $row->id;
}
if ($res->num_rows() > 0) echo '</td></tr>';
答案 3 :(得分:-1)
假设你的行在$ row var中,而ID是$ row [“ID”]
?>
<td id="<php echo $row["id"]; ?>">
<?php echo $row["id"]; ?>
</td>
<?php