如何在单行(in)的html表中显示具有相同id的多个记录?

时间:2014-01-15 17:09:41

标签: php html codeigniter

我有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>

4 个答案:

答案 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