gpt4 book ai didi

PHP 和 MYSQL 对数据库结果进行分组并显示

转载 作者:行者123 更新时间:2023-11-29 03:26:02 25 4
gpt4 key购买 nike

当我想对数据库中的结果进行分组时,我遇到了这个问题。我需要表 1)devices 和 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

最佳答案

可以通过在用户变量中记录之前的组名来达到预期的结果。

改变 $qry 如下:

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

关于PHP 和 MYSQL 对数据库结果进行分组并显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com