Ich habe dieses Problem, wenn ich Ergebnisse aus der Datenbank gruppieren möchte. Ich habe zu Tabellen 1) Geräte und 2) device_groups. Ich habe INNER JOIN verwendet, um verwandte Daten zu erhalten.PHP und MYSQL Gruppe Ergebnisse aus der Datenbank und Anzeige
$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);
Der folgende Code sieht wie folgt aus:
<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>
Und ich bekomme das Ergebnis wie folgt aus:
Group Name | Device ID
group1 | 154
group1 | 155
group1 | 156
group2 | 157
group2 | 158
group2 | 159
group3 | 160
group3 | 161
Also, meine Frage ist, was zu einer Gruppe Datum der gute Weg ist durch groupName oder groupId und es wie in der folgenden Tabelle anzeigen? Wie Sie sehen können, möchte ich den Gruppennamen nur einmal ausgeben lassen und alle Geräte, die zu dieser Gruppe gehören, werden in Verbindung mit dem Gruppennamen gedruckt.
Group Name | Device ID
...........................
group1 | 154
| 155
| 156
...........................
group2 | 157
| 158
| 159
...........................
group3 | 160
| 161