MySQL Group by und als eine Gruppe in HTML ausgeben.

B

BloodSteam

Guest
Hallo,
wusste nicht wie Ich dieses Thread nennen soll, falls jemand eine bessere Idee hat, dann sagt bescheid.

Meine Tabelle in der Datenbank sieht folgend aus:

Code:
id | hersteller | modell | typ | preis
1 | BMW | 3er | limo | 555
2 | BMW | 5er | kombi | 666
3 | BMW | 6er | limo | 777
4 | Audi | RS3 | limo | 888
5 |Audi | RS4 | limo | 999
6 | VW | Polo 5 | hatch | 1000

Was mein Ziel ist, dass ein div(container) pro hersteller erstellt werden soll.
Code:
<div id="audi">
   <a>Audi RS3</a>
   <a>Audi RS4</a>
</div>
<div id="bmw">
   <a>BMW 3er</a>
   <a>BMW 5er</a>
   <a>BMW 6er</a>
</div>
<div id="vw">
   <a>VW Polo 5</a>
</div>

Soweit weiß Ich nur wie Ich alles in einem div ausgeben kann:
Code:
if($resultCheck > 0){
  echo '<div id="'.$row['hersteller'].'">';  // Dass hier gibt nur einen Hersteller raus und wirft alle Autos rein :(
    while($row = $result->fetch_assoc()) {
      echo '<a href="'.$row['link'].'">'.$row['hersteller'].' '.$row['modell'].' '.$row['typ'].' '.$row['preis'].'</a>';
    }
  echo '</div>';
}

Problem ist, wenn Ich es mache, hab ich 3x ein <div id="hersteller"> für jedes Auto. :(
 
Zuletzt bearbeitet:
AW: PHP durch die Resulte loopen (zwei loops)

Die einfachste und schnellste Methode:
1. Stelle sicher, das deine Liste auch nach Herstellern sortiert ist (ORDER BY) <- Sehr wichtig, sonst wird es komplizierter
2. Setze vor der Schleife eine Variable mit leerem String
3. Prüfe, ob der Inhalt der Variable mit dem aktuellen Hersteller gleich ist. Wenn ja, dann nur den Link. Wenn nein, neuer DIV
4. Setze den Wert der Variable auf den Hersteller
Code:
if($resultCheck > 0){
    $hersteller = '';
    while($row = $result->fetch_assoc()) {
      if($hersteller === $row['hersteller']) {
        echo '<a href="'.$row['link'].'">'.$row['hersteller'].' '.$row['modell'].' '.$row['typ'].' '.$row['preis'].'</a>';
      } else {
        echo $hersteller === '' ? '' : '</div>';
        echo '<div id="'.strtolower($row['hersteller']).'"><a href="'.$row['link'].'">'.$row['hersteller'].' '.$row['modell'].' '.$row['typ'].' '.$row['preis'].'</a>';
      }
      $hersteller = $row['hersteller'];
    }
  echo '</div>';
}
Und kleiner Tip am Rande. Tabellen sind zum Layouten böse. Aber nicht, um tabellarische Daten anzuzeigen. Du musst also nicht zwanghaft auf Tabellen verzichten. Ich würde also eine Tabelle benutzen und den Link auf das Model setzen. Wenn du nur Hersteller und Modell anzeigst, dann kann man das so machen. Aber wenn noch weitere Daten wie Typ, Preis und ggf. später noch weitere Infos eingebettet werden sollen, dann ist es direkt hintereinander unübersichtlich.

EDIT: Ich sehe gerade, das dies nicht ganz funktioniert. Der DIV wird um einen Eintrag verschoben, da die Variable erst am Ende geändert wird. Kleiner Denkfehler meinerseits.

So wird ein Schuh draus :D
Code:
if($resultCheck > 0){
    $hersteller = '';
    while($row = $result->fetch_assoc()) {
    if($hersteller !== $row['hersteller']) {
      echo $hersteller === '' ? '' : '</div>';
      echo '<div id="'.strtolower($row['hersteller']).'">';
    }
    $hersteller = $row['hersteller'];
    echo '<a href="'.$row['link'].'">'.$row['hersteller'].'  '.$row['modell'].' '.$row['typ'].' '.$row['preis'].'</a>';
}
echo '</div>';

EDIT 2: Ich bitte um entschuldigung. Beide funktionieren. Sieht nur anders aus. Ich bin noch nicht ganz wach :D
 
Zuletzt bearbeitet:
AW: PHP durch die Resulte loopen (zwei loops)

Ich hatte mal ein Nickerchen :3
Ich hab so eine Idee.

Bevor man die "Modelle Loopt" erstelle Ich ein Array. Wenn der Hersteller nicht im Array ist = erstelle den Div dann füge den Hersteller in das Array und fahre mit dem Loop fort.

Sollte in der Theorie funktionieren.
 
AW: PHP durch die Resulte loopen (zwei loops)

Ich hatte mal ein Nickerchen :3
Ich hab so eine Idee.

Bevor man die "Modelle Loopt" erstelle Ich ein Array. Wenn der Hersteller nicht im Array ist = erstelle den Div dann füge den Hersteller in das Array und fahre mit dem Loop fort.

Sollte in der Theorie funktionieren.
Ähm warum so aufwendig? Wenn die Liste nach Herstellern sortiert ist, warum dann nicht so wie gezeigt?
 
AW: PHP durch die Resulte loopen (zwei loops)

Ähm warum so aufwendig? Wenn die Liste nach Herstellern sortiert ist, warum dann nicht so wie gezeigt?

Weil der richtige Weg manchmal der aufwendigere ist. Bei Hobby Internetseiten könnte es wahrscheinlich "super sein" aber nicht bei einem Familienunternehmen dass seit über 10 Jahren existiert und wie gesagt FAMILIEN + UNTERNEHMEN. Da gibt es sowas wie "aufwendig" nicht.
 
AW: PHP durch die Resulte loopen (zwei loops)

Im Prinzip is deine Idee ähnlich, aber ich versteh nich so ganz, warum du was gegen das Sortieren hast ^^ Solange der Hersteller-String sich nich ändert, fügst du dann Links (oder was auch immer) hinzu, wenn er sich ändert, erstellst du ein neues div. Einfach und genauso richtig - aber etwas effizienter. Und ich denke, auch Familienunternehmen dürfen Effizient arbeiten :P
 
AW: PHP durch die Resulte loopen (zwei loops)

Im Prinzip is deine Idee ähnlich, aber ich versteh nich so ganz, warum du was gegen das Sortieren hast ^^ Solange der Hersteller-String sich nich ändert, fügst du dann Links (oder was auch immer) hinzu, wenn er sich ändert, erstellst du ein neues div. Einfach und genauso richtig - aber etwas effizienter. Und ich denke, auch Familienunternehmen dürfen Effizient arbeiten :P

Nur weil man ein einfaches Beispiel zeigt, heißt es nicht das mein Code auch so einfach ist :)
 
AW: PHP durch die Resulte loopen (zwei loops)

Ich würde dir hier raten, falls möglich, die Tabellen auf die dritte Normalform zu bringen (Wikipedia-Artikel: Normalisierung (Datenbank) – Wikipedia, wichtig davon sind die Normalformen 1 bis 3).

Um das Ganze hier ganz grob für deinen Anwendungsfall zu erklären: Du teilst deine Tabelle in zwei auf.

Code:
Tabelle "modelle"
id | hersteller_id | modell | typ | preis
1 | 1 | 3er | limo | 555
2 | 1 | 5er | kombi | 666
3 | 1 | 6er | limo | 777
4 | 2 | RS3 | limo | 888
5 | 2 | RS4 | limo | 999
6 | 3 | Polo 5 | hatch | 1000

Code:
Tabelle "hersteller"
id | name
1 | BMW
2 | Audi
3 | VW

Dann kannst du nämlich einmal durch alle Hersteller loopen und jedes Modell aus der DB ziehen, welches zu diesem Hersteller gehört.
Hat den Vorteil, dass man die Herstellerinformationen unabhängig von den anderen Daten nutzen kann und Änderungen nicht an jedem Datensatz vorgenommen werden müssen.
Wäre bspw. auch beim Feld "modell" hilfreich.

Also erst mit folgender Query alle Hersteller abfragen:
Code:
SELECT id, name FROM hersteller;

Dann durch die Ergebnisse loopen und "%hersteller_id%" mit der ID des aktuellen Herstellers im Loop-Durchlauf ersetzen.
Code:
SELECT id, modell, typ, preis FROM modelle WHERE hersteller_id = %hersteller_id%;
 
AW: PHP durch die Resulte loopen (zwei loops)

Es gibt sowas wie ein "Multidimmensional Array"
PHP 5 Multidimensional Arrays

Soweit hab Ich alles sortiert nun hab Ich keine Ahnung wie Ich die ganzen Sachen anzeigen soll.

Code:
$herstellerArray = array();
				
				while($row = $result->fetch_assoc()){
					$typ = utf8_encode($row['typ']);
					$herstellerArray[$row['hersteller']][] = array($row['hersteller'],$row['serie'],$row['modell'],$typ,$row['baujahr']);
				}
				print_r($herstellerArray);

bekomme Ich sowas hier:
Code:
Array ( [BMW] => Array ( [0] => Array ( [0] => BMW [1] => 5er [2] => F10 [3] => [4] => 2010-2017 ) [1] => Array ( [0] => BMW [1] => 1er [2] => F40 [3] => 3-Türer [4] => 2019+ ) [2] => Array ( [0] => BMW [1] => 1er [2] => F40 [3] => 5-Türer [4] => 2019+ ) [3] => Array ( [0] => BMW [1] => 2er [2] => F45 [3] => Active Tourer [4] => 2014-Heute ) [4] => Array ( [0] => BMW [1] => 2er [2] => F46 [3] => Gran Tourer [4] => 2015-Heute ) [5] => Array ( [0] => BMW [1] => 2er [2] => F22 [3] => Coupe [4] => 2013-Heute ) [6] => Array ( [0] => BMW [1] => 2er [2] => F23 [3] => Cabrio [4] => 2013-Heute ) [7] => Array ( [0] => BMW [1] => M2 [2] => F87 [3] => Coupe [4] => 2015-Heute ) [8] => Array ( [0] => BMW [1] => 3er [2] => F30 [3] => Limousine [4] => 2011-Heute ) [9] => Array ( [0] => BMW [1] => 3er [2] => F31 [3] => Touring [4] => 2011-Heute ) [10] => Array ( [0] => BMW [1] => 3er [2] => F34 [3] => Gran Turismo [4] => 2013-Heute ) [11] => Array ( [0] => BMW [1] => 4er [2] => F32 [3] => Coupe [4] => 2013-Heute ) [12] => Array ( [0] => BMW [1] => 4er [2] => F33 [3] => Cabrio [4] => 2013-Heute ) [13] => Array ( [0] => BMW [1] => 4er [2] => F36 [3] => Gran Coupe [4] => 2013-Heute ) [14] => Array ( [0] => BMW [1] => M4 [2] => F82 [3] => Coupe [4] => 2014-Heute ) [15] => Array ( [0] => BMW [1] => M4 [2] => F83 [3] => Cabrio [4] => 2014-Heute ) [16] => Array ( [0] => BMW [1] => 5er [2] => G30 [3] => Limousine [4] => 2017-Heute ) [17] => Array ( [0] => BMW [1] => 5er [2] => G31 [3] => Touring [4] => 2017-Heute ) [18] => Array ( [0] => BMW [1] => 5er [2] => G38 [3] => Gran Turismo [4] => 2017-Heute ) [19] => Array ( [0] => BMW [1] => 6er [2] => G32 [3] => Gran Turismo [4] => 2017-Heute ) [20] => Array ( [0] => BMW [1] => 7er [2] => G11 [3] => Limousine [4] => 2015-Heute ) [21] => Array ( [0] => BMW [1] => 8er [2] => G15 [3] => Coupe [4] => 2019+ ) ) [Mercedes Benz] => Array ( [0] => Array ( [0] => Mercedes Benz [1] => C Klasse [2] => W205 [3] => Limousine [4] => 2014-2018 ) ) )

Weil sowas wie
Code:
$herstellerArray[0][0]
gibt nichts raus. Bisschen nervig, als ob man solche Sachen nicht einfachen machen könnte....
 
AW: PHP durch die Resulte loopen (zwei loops)

Gerade bei multidimensionalen Array's ist es hilfreicher, die Debug-Ausgabe nicht mit print_r, sondern mit var_export zu machen. Da ist die Übersicht deutlich besser. Dadurch siehst du auf dem ersten Blick direkt, ob die Array's korrekt verschachtelt sind.
Code:
echo "<pre>".var_export($herstellerArray,true)."</pre>";
PHP: var_export - Manual

Desweieteren solltest du es mal mit:
Code:
$herstellerArray['BMW'][0][0];
versuchen. Du hast wohl übersehen, das die erste Dimension als Schlüssel den Bezeichner des Herstellers trägt.

Ich gehe mal davon aus, das du damit versuchst, getrennte Tabellen für die einzelnen Hersteller anzuzeigen. Sowas gehört bei mir aber grundsätzlich in den Ausgabe-Teil (oder ins View für alle, die nach dem MVC-Prinzip arbeiten). Auf die Art hast du im Grunde nur unnötige Verschachtelung im Array. Ich empfehle weiterhin, einfach bei der Ausgabe im Loop auf die Änderung des Herstellers zu reagieren. Die Sortierung dafür übernimmt der SQL Query. z.B:
SELECT * FROM cars ORDER BY hersteller ASC, typ ASC
Dadurch wird zuerst alles auf den Hersteller sortiert und innerhalb der Hersteller noch zusätzlich nach dem Typ. Du kannst also ohne Probleme mit der Schleife bei der Ausgabe sauber nach Herstellern trennen. Ändert sich der Hersteller, neue Tabelle anlegen und fertig. Siehe vorherige Vorschläge. Das gleiche gilt übrigens für die Spalten. Ich verwende fetch_all(MYSQL_ASSOC) und spare mir die Fetch-Schleife komplett. Ich habe dabei nur noch ein Schleifen-System in der Ausgabe und dank der Sortierung beim Query kann ich auch auf Schleifen-Verschachtelung verzichten.
 
Zuletzt bearbeitet:
AW: PHP durch die Resulte loopen (zwei loops)

Gerade bei multidimensionalen Array's ist es hilfreicher, die Debug-Ausgabe nicht mit print_r, sondern mit var_export zu machen. Da ist die Übersicht deutlich besser. Dadurch siehst du auf dem ersten Blick direkt, ob die Array's korrekt verschachtelt sind.
Code:
echo "<pre>".var_export($herstellerArray,true)."</pre>";
PHP: var_export - Manual

Desweieteren solltest du es mal mit:
Code:
$herstellerArray['BMW'][0][0];
versuchen. Du hast wohl übersehen, das die erste Dimension als Schlüssel den Bezeichner des Herstellers trägt.

Ich gehe mal davon aus, das du damit versuchst, getrennte Tabellen für die einzelnen Hersteller anzuzeigen. Sowas gehört bei mir aber grundsätzlich in den Ausgabe-Teil (oder ins View für alle, die nach dem MVC-Prinzip arbeiten). Auf die Art hast du im Grunde nur unnötige Verschachtelung im Array. Ich empfehle weiterhin, einfach bei der Ausgabe im Loop auf die Änderung des Herstellers zu reagieren. Die Sortierung dafür übernimmt der SQL Query. z.B:

Dadurch wird zuerst alles auf den Hersteller sortiert und innerhalb der Hersteller noch zusätzlich nach dem Typ. Du kannst also ohne Probleme mit der Schleife bei der Ausgabe sauber nach Herstellern trennen. Ändert sich der Hersteller, neue Tabelle anlegen und fertig. Siehe vorherige Vorschläge. Das gleiche gilt übrigens für die Spalten. Ich verwende fetch_all(MYSQL_ASSOC) und spare mir die Fetch-Schleife komplett. Ich habe dabei nur noch ein Schleifen-System in der Ausgabe und dank der Sortierung beim Query kann ich auch auf Schleifen-Verschachtelung verzichten.

Es gibt bei mir folgendes aus:

Code:
array (
  'BMW' => 
  array (
    0 => 
    array (
      0 => 'BMW',
      1 => '5er',
      2 => 'F10',
      3 => '',
      4 => '2010-2017',
    ),
    1 => 
    array (
      0 => 'BMW',
      1 => '1er',
      2 => 'F40',
      3 => '3-Türer',
      4 => '2019+',
    ),
    2 => 
    array (
      0 => 'BMW',
      1 => '1er',
      2 => 'F40',
      3 => '5-Türer',
      4 => '2019+',
    ),
    3 => 
    array (
      0 => 'BMW',
      1 => '2er',
      2 => 'F45',
      3 => 'Active Tourer',
      4 => '2014-Heute',
    ),
    4 => 
    array (
      0 => 'BMW',
      1 => '2er',
      2 => 'F46',
      3 => 'Gran Tourer',
      4 => '2015-Heute',
    ),
    5 => 
    array (
      0 => 'BMW',
      1 => '2er',
      2 => 'F22',
      3 => 'Coupe',
      4 => '2013-Heute',
    ),
    6 => 
    array (
      0 => 'BMW',
      1 => '2er',
      2 => 'F23',
      3 => 'Cabrio',
      4 => '2013-Heute',
    ),
    7 => 
    array (
      0 => 'BMW',
      1 => 'M2',
      2 => 'F87',
      3 => 'Coupe',
      4 => '2015-Heute',
    ),
    8 => 
    array (
      0 => 'BMW',
      1 => '3er',
      2 => 'F30',
      3 => 'Limousine',
      4 => '2011-Heute',
    ),
    9 => 
    array (
      0 => 'BMW',
      1 => '3er',
      2 => 'F31',
      3 => 'Touring',
      4 => '2011-Heute',
    ),
    10 => 
    array (
      0 => 'BMW',
      1 => '3er',
      2 => 'F34',
      3 => 'Gran Turismo',
      4 => '2013-Heute',
    ),
    11 => 
    array (
      0 => 'BMW',
      1 => '4er',
      2 => 'F32',
      3 => 'Coupe',
      4 => '2013-Heute',
    ),
    12 => 
    array (
      0 => 'BMW',
      1 => '4er',
      2 => 'F33',
      3 => 'Cabrio',
      4 => '2013-Heute',
    ),
    13 => 
    array (
      0 => 'BMW',
      1 => '4er',
      2 => 'F36',
      3 => 'Gran Coupe',
      4 => '2013-Heute',
    ),
    14 => 
    array (
      0 => 'BMW',
      1 => 'M4',
      2 => 'F82',
      3 => 'Coupe',
      4 => '2014-Heute',
    ),
    15 => 
    array (
      0 => 'BMW',
      1 => 'M4',
      2 => 'F83',
      3 => 'Cabrio',
      4 => '2014-Heute',
    ),
    16 => 
    array (
      0 => 'BMW',
      1 => '5er',
      2 => 'G30',
      3 => 'Limousine',
      4 => '2017-Heute',
    ),
    17 => 
    array (
      0 => 'BMW',
      1 => '5er',
      2 => 'G31',
      3 => 'Touring',
      4 => '2017-Heute',
    ),
    18 => 
    array (
      0 => 'BMW',
      1 => '5er',
      2 => 'G38',
      3 => 'Gran Turismo',
      4 => '2017-Heute',
    ),
    19 => 
    array (
      0 => 'BMW',
      1 => '6er',
      2 => 'G32',
      3 => 'Gran Turismo',
      4 => '2017-Heute',
    ),
    20 => 
    array (
      0 => 'BMW',
      1 => '7er',
      2 => 'G11',
      3 => 'Limousine',
      4 => '2015-Heute',
    ),
    21 => 
    array (
      0 => 'BMW',
      1 => '8er',
      2 => 'G15',
      3 => 'Coupe',
      4 => '2019+',
    ),
  ),
  'Mercedes Benz' => 
  array (
    0 => 
    array (
      0 => 'Mercedes Benz',
      1 => 'C Klasse',
      2 => 'W205',
      3 => 'Limousine',
      4 => '2014-2018',
    ),
  ),
)

Wie soll Ich es denn ausgeben bzw wie mache Ich ein Nutzen aus dem
Code:
ORDER BY hersteller ASC,typ ASC
?
 
AW: PHP durch die Resulte loopen (zwei loops)

Richtig! Damit kannst du hervorragend sehen, wie dein mehrdimensionales Array strukturiert ist. Liest sich deutlich besser als ein Einzeiler

Wie gesagt hast du die Daten in eine dritte Dimension verschachtelt. Daher kann natürlich $herstellerArray[0][0] nichts ausgeben, weil an der Stelle nichts ist. Es muss heißen: $herstellerArray['BMW'][0][0]

Das müsste dann folgendes Ausgeben:
Code:
BMW

Wie soll Ich es denn ausgeben bzw wie mache Ich ein Nutzen aus dem
Code:
ORDER BY hersteller ASC,typ ASC
?
Auf die Art und Weise steuerst du die Sortierung bereits beim holen der Daten aus der Datenbank. Zuerst sortiert sie nach Hersteller und innerhalb der Hersteller nach dem Typ. Du musst in PHP nichts sortieren. Das erledigt die Datenbank für dich. Du musst nur die Informationen, die du bekommst, formatieren und ausgeben. Du kannst dir dabei sicher sein, das alle Autos des gleichen Herstellers hintereinander kommen und innerhalb der Hersteller die Auto's nach ihrem Typ sortiert werden. Du kannst auch nach Modell sortieren lassen, wenn du magst. Aber es ist schon sortiert und du musst es nur noch wie gewünscht ausgeben.

Zum Beispiel so:
Code:
$herstellerArray = result->fetch_all(MYSQL_ASSOC);  // Daten einfach komplett fetchen

$hersteller = '';   // Hersteller-Variable, mit der man prüfen kann, wann sich der Hersteller in der Liste ändert
$output = '';       // Ausgabe-Speicher

foreach($herstellerArray as $row) {
    // Auf Änderung des Herstellers beim durchlaufen prüfen
    if($hersteller !== $row['hersteller']) {
        // Wenn geändert, passiert folgendes:
        $output .= ($hersteller === '') ? '' : '</table>';  // Prüfen, ob es der erste durchlauf ist. Wenn nicht, alte Tabelle abschließen
        $output .= '<h2>'.$row['hersteller'].'</h2>';       // Überschrift für den Hersteller ausgeben
        $output .= '<table>';                               // Tabelle für den Hersteller einleiten
        $hersteller = $row['hersteller'];                   // Hersteller-Variable auf den neuen Hersteller setzen
    }

    // Ausgabe der Modelle in Tabellen-Reihen
    $output .= '<tr>';
    $output .= '<td>'.$row['hersteller'].'</td>';
    $output .= '<td>'.$row['modell'].'</td>';
    $output .= '<td>'.$row['typ'].'</td>';
    $output .= '<td>'.$row['baujahr'].'</td>';
    // Hier beliebig erweitern
    $output .= '</tr>';
    // Ende der Tabellen-Reihe
}

// Ausgabe der Fahrzeuglisten
echo $output;
Ich habe das erstellen der Ausgabe bewusst so weit aufgedröselt, wie es geht, um das ganze Zeilenweise zu verdeutlichen. Ob du das nun in Tabellen oder DIV's machst, bleibt dir überlassen. Aber für soetwass würde sich Tabellen am besten eignen. Es sei denn, du baust daraus eher eine Art Showroom für ein Sortiment. Dann macht es als DIV optisch mehr Sinn.
 
Zuletzt bearbeitet:
AW: PHP durch die Resulte loopen (zwei loops)

Richtig! Damit kannst du hervorragend sehen, wie dein mehrdimensionales Array strukturiert ist. Liest sich deutlich besser als ein Einzeiler

Wie gesagt hast du die Daten in eine dritte Dimension verschachtelt. Daher kann natürlich $herstellerArray[0][0] nichts ausgeben, weil an der Stelle nichts ist. Es muss heißen: $herstellerArray['BMW'][0][0]

Das müsste dann folgendes Ausgeben:
Code:
BMW


Auf die Art und Weise steuerst du die Sortierung bereits beim holen der Daten aus der Datenbank. Zuerst sortiert sie nach Hersteller und innerhalb der Hersteller nach dem Typ. Du musst in PHP nichts sortieren. Das erledigt die Datenbank für dich. Du musst nur die Informationen, die du bekommst, formatieren und ausgeben. Du kannst dir dabei sicher sein, das alle Autos des gleichen Herstellers hintereinander kommen und innerhalb der Hersteller die Auto's nach ihrem Typ sortiert werden. Du kannst auch nach Modell sortieren lassen, wenn du magst. Aber es ist schon sortiert und du musst es nur noch wie gewünscht ausgeben.

Zum Beispiel so:
Code:
$herstellerArray = result->fetch_all(MYSQL_ASSOC);  // Daten einfach komplett fetchen

$hersteller = '';   // Hersteller-Variable, mit der man prüfen kann, wann sich der Hersteller in der Liste ändert
$output = '';       // Ausgabe-Speicher

foreach($herstellerArray as $row) {
    // Auf Änderung des Herstellers beim durchlaufen prüfen
    if($hersteller !== $row['hersteller']) {
        // Wenn geändert, passiert folgendes:
        $output .= ($hersteller === '') ? '' : '</table>';  // Prüfen, ob es der erste durchlauf ist. Wenn nicht, alte Tabelle abschließen
        $output .= '<h2>'.$row['hersteller'].'</h2>';       // Überschrift für den Hersteller ausgeben
        $output .= '<table>';                               // Tabelle für den Hersteller einleiten
        $hersteller = $row['hersteller'];                   // Hersteller-Variable auf den neuen Hersteller setzen
    }

    // Ausgabe der Modelle in Tabellen-Reihen
    $output .= '<tr>';
    $output .= '<td>'.$row['hersteller'].'</td>';
    $output .= '<td>'.$row['modell'].'</td>';
    $output .= '<td>'.$row['typ'].'</td>';
    $output .= '<td>'.$row['baujahr'].'</td>';
    // Hier beliebig erweitern
    $output .= '</tr>';
    // Ende der Tabellen-Reihe
}

// Ausgabe der Fahrzeuglisten
echo $output;
Ich habe das erstellen der Ausgabe bewusst so weit aufgedröselt, wie es geht, um das ganze Zeilenweise zu verdeutlichen. Ob du das nun in Tabellen oder DIV's machst, bleibt dir überlassen. Aber für soetwass würde sich Tabellen am besten eignen. Es sei denn, du baust daraus eher eine Art Showroom für ein Sortiment. Dann macht es als DIV optisch mehr Sinn.

Wird sowas wie bei zb BMW mit den Autos. Wo Bilder angezeigt werden, so eine Tabelle für eine Dienstleistung wie Sattler ist nicht so schön.
Irgendwas hat nicht funktioniert, gegoogelt und:

Code:
$herstellerArray = mysqli_fetch_all($result,MYSQLI_ASSOC);

Mein Gehirn brennt schon vom denken.
Code:
echo '<figure><img src="bilder/'.$src.'.jpg" alt="'.$text,$text2.'"><figcaption>'.$text.'</figcaption><figcaption>'.$text2.'</figcaption><figcaption>Volleder ab '.$preis.'€* Netto.</figcaption><figcaption>('.$preisBrutto.'€ Brutto)</figcaption></figure>';
so outpute Ich ein Fahrzeug mit Foto.

So sollte es eigentlich aussehen bloß, Ich weiß nicht wie Ich das <legend> Element in den fireldset einfüge.

Code:
if($hersteller !== $row['hersteller']) {
						// Wenn geändert, passiert folgendes:
						$output .= ($hersteller === '') ? '' : '</fieldset>';  // Prüfen, ob es der erste durchlauf ist. Wenn nicht, alte Tabelle abschließen
						$output .= '</fieldset>';                               // Tabelle für den Hersteller einleiten
						$output .= '<legend>'.$row['hersteller'].'</legend>';       // Überschrift für den Hersteller ausgeben
						$hersteller = $row['hersteller'];                   // Hersteller-Variable auf den neuen Hersteller setzen
					}
 
Zuletzt bearbeitet:
AW: PHP durch die Resulte loopen (zwei loops)

So sollte es eigentlich aussehen bloß, Ich weiß nicht wie Ich das <legend> Element in den fireldset einfüge.

Code:
if($hersteller !== $row['hersteller']) {
                        // Wenn geändert, passiert folgendes:
                        $output .= ($hersteller === '') ? '' : '</fieldset>';  // Prüfen, ob es der erste durchlauf ist. Wenn nicht, alte Tabelle abschließen
                        $output .= '</fieldset>';                               // Tabelle für den Hersteller einleiten
                        $output .= '<legend>'.$row['hersteller'].'</legend>';       // Überschrift für den Hersteller ausgeben
                        $hersteller = $row['hersteller'];                   // Hersteller-Variable auf den neuen Hersteller setzen
                    }
Naja als erstes solltest du das Fieldset auchmal öffnen:
Code:
if($hersteller !== $row['hersteller']) {
                        // Wenn geändert, passiert folgendes:
                        $output .= ($hersteller === '') ? '' :  '</fieldset>';  // Prüfen, ob es der erste durchlauf ist. Wenn  nicht, alte Tabelle abschließen
                        [COLOR=#ff0000][B]$output .= '<fieldset>';[/B]                               // Tabelle für den Hersteller einleiten [COLOR=#ff0000][B](HIER IST DER FEHLER)[/B]                        $output .=  '<legend>'.$row['hersteller'].'</legend>';       //  Überschrift für den Hersteller ausgeben
                        $hersteller = $row['hersteller'];                    // Hersteller-Variable auf den neuen Hersteller setzen
                    }
Wenn du nie ein Fieldset aufmachst, kann auch das Legend in kein Fieldset ;)
 
AW: PHP durch die Resulte loopen (zwei loops)

Ich verstehe nicht ganz wie das alles funktioniert :p

$output .= ($hersteller === '') ? '' : '</fieldset>';
Wieso ist da ein Doppelpunkt und ein Fragezeichen?
 
Ternärer Operator PHP


Jetzt im Ernst Mal, das hier ist kein Programmierkurs. Ein wenig Eigeninitiative kannst du auch mal zeigen. Soll heißen, google deine Fragen und frag dann hier nach, wenn du keine Antwort gefunden hast. Eine Suche nach "PHP Fragezeichen" verrät dir alles, was du zum Fragezeichen und Doppelpunkt wissen möchtest.
 
Ternärer Operator PHP


Jetzt im Ernst Mal, das hier ist kein Programmierkurs. Ein wenig Eigeninitiative kannst du auch mal zeigen. Soll heißen, google deine Fragen und frag dann hier nach, wenn du keine Antwort gefunden hast. Eine Suche nach "PHP Fragezeichen" verrät dir alles, was du zum Fragezeichen und Doppelpunkt wissen möchtest.

Weiß nicht was dein Problem ist, du hast hier auch keinem geholfen, somit verstehe Ich jetzt dein Problem nicht. Würde Dino mir sowas schreiben, ok, er hat mir im Gegensatz zu dir geholfen, somit kann Ich verstehen dass Ich seine Hilfe ausgeschöpft hab.

@DataDino
Danke, hab es irgendwie beim Editieren verstanden.
Nochmals, dankeschön für deine Hilfe.
 
Zuletzt bearbeitet:
Zurück