Hallo dedlfix,
danke für Deine Antwort. Und warum nicht immer Gruppenwechseltechnik? (Danke für den Begriff, den kannte ich nicht, obwohl ich die Technik schon oft angewendet hatte)
Tabelle marke
+----+-------+
| id | name  |
+----+-------+
|  1 | Audi  |
|  2 | VW    |
|  3 | Skoda |
|  4 | Seat  |
+----+-------+
Tabelle modell
+----+---------+----------+
| id | name    | marke_id |
+----+---------+----------+
|  1 | A2      |        1 |
|  2 | A4      |        1 |
|  3 | A6      |        1 |
|  4 | Golf    |        2 |
|  5 | Sharan  |        2 |
|  6 | Touareg |        2 |
|  7 | Octavia |        3 |
|  8 | Fabia   |        3 |
|  9 | Yeti    |        3 |
| 10 | Leon    |        4 |
| 11 | Ibiza   |        4 |
+----+---------+----------+
SELECT
  ma.name AS marke_name,
  mo.name AS modell_name
FROM marke ma
INNER JOIN modell mo
  ON ma.id = mo.marke_id
ORDER BY ma.name, mo.name
+------------+-------------+
| marke_name | modell_name |
+------------+-------------+
| Audi       | A2          |
| Audi       | A4          |
| Audi       | A6          |
| Seat       | Ibiza       |
| Seat       | Leon        |
| Skoda      | Fabia       |
| Skoda      | Octavia     |
| Skoda      | Yeti        |
| VW         | Golf        |
| VW         | Sharan      |
| VW         | Touareg     |
+------------+-------------+
Nun wird die Ausgabe mittels Gruppenbruch in eine lesbar gegliederte Form gebracht.
$last_entry = null;
while ($row = $result->fetch_object()) {
   if ($last_entry != $row->marke_name) {
        echo $row->marke_name.'<br>';
        $last_entry = $row->marke_name;
    }
    echo '- '.$row->modell_name.'<br>';
}
Ausgabe:
Audi
- A2
- A4
- A6
Seat
- Ibiza
- Leon
Skoda
- Fabia
- Octavia
- Yeti
VW
- Golf
- Sharan
- Touareg
Quelle: https://php-de.github.io/jumpto/gruppenbruch/
Pit
 nicht angemeldet
 nicht angemeldet Rolf B
 Rolf B