PHP和MYSQL组来自数据库和显示

时间:2016-03-24 16:54:45

标签: php mysql

当我想从数据库中分组结果时,我遇到了这个问题。我必须使用表1)设备和2) device_groups 。我使用INNER JOIN获取相关数据。

$mysqli = new mysqli('localhost', 'name', 'pass', 'tbl');


$qry = "
        SELECT g.id as groupId, g.name as groupName, d.device_id
        FROM librenms.devices as d
        INNER JOIN librenms.device_groups as g
                ON d.hostname LIKE  CONCAT('%', mysql.SPLIT_STR(g.pattern, '\"', 2), '%')
        WHERE g.pattern LIKE '_devices.hostname%'
        ORDER BY g.id
";


$qid = $mysqli->query($qry); 

以下代码如下所示:

<table>
<tr>
    <th>Group Name</th>
    <th>Device ID</th>
</tr>
<?php while($row = $qid->fetch_assoc()){
    $deviceId = split(",",$row["device_id"]);
?>
    <tr>
        <td><?php echo $row["groupName"] ?> </td>
        <td><?php echo $deviceId[0]; array_shift($deviceId) ?></td>
    </tr>
    <?php foreach( $deviceId as $device){ ?>
        <tr>
            <td></td>
            <td><?php echo $device ?></td>
        </tr>
    <?php } ?>
<?php } ?>
</table>

我得到的结果如下:

Group Name  | Device ID
group1      | 154
group1      | 155
group1      | 156
group2      | 157
group2      | 158
group2      | 159
group3      | 160
group3      | 161

所以,我的问题是通过groupName或groupId对日期进行分组的好方法是什么,并在下表中显示它?如您所见,我想让组名只打印一次,属于该组的所有设备都将与组名打印。

 Group Name     | Device ID
...........................
    group1      | 154
                | 155
                | 156
...........................
    group2      | 157
                | 158
                | 159
...........................
    group3      | 160
                | 161

1 个答案:

答案 0 :(得分:0)

可以通过在belongsToMany()中记录先前的组名来实现预期结果。

如下所示更改user variable

$qry