Ausgeben in Rubriken / Kategorien

Worka

Mitglied
Hallo Leute , ich bin mal wieder auf ein Problem gekommen, wo ich ohne eure Hilfe nicht weiter komme. Ich lese per PHP und MYSQL Daten von Maschinen usw aus, die listet er mir denn mit Bild auf.. In der MySQL Tabelle gibt es auch eine Spalte "Rubrik" und möchte gerne das er das so wie beim Beispiel zwei sortiert

Hier das Bild wie es nun aussieht :

Beispiel 1

Hier das Bild wie es gerne aussehen sollte, habs nur eben so erstellt auf HTML Basis..

Beispiel 2

Das auslesen ist ja nicht die Schwierigkeit, nur die Sortierung der Ausgabe mit den Tabellen erstelllen.. ich hoffe es kann mir jemand dabei helfen...

Hier ist mein jetziger Code :

PHP:
<?

$result = mysql_query("SELECT * FROM maschinen"); 
$num = mysql_numrows($result);

?>

<?php 



  $SPALTEN = 4; 

  echo "<table border=\"0\" align=\"center\">\n  <tr>\n"; 
      
 for ($z_id=0; $z_id<$num; $z_id++)
   {
      $id = mysql_result($result, $z_id, "id");
      $geraet = mysql_result($result, $z_id, "geraet");
      $typ = mysql_result($result, $z_id, "typ");
      $ident = mysql_result($result, $z_id, "ident");
      $baujahr = mysql_result($result, $z_id, "baujahr");
      $anschaffung = mysql_result($result, $z_id, "anschaffung");
      $wert = mysql_result($result, $z_id, "wert");
      $zubehoer = mysql_result($result, $z_id, "zubehoer");
      $date = mysql_result($result, $z_id, "date");
      $rubrik = mysql_result($result, $z_id, "rubrik");
      
      

if ($z_id % $SPALTEN == 0 && $z_id > 0) 
    { 
    
    echo " </tr>\n  <tr>\n"; 
    } 
    echo "  
     
    <td height='' width='125'>
<div align='center'><a href='update?id=$id'><img src='bilder/$id.$ext' width='80' height='80' border='1'></a></div><div align='center' class='schrift'><br> 
$geraet<br><br>
</div>     
</td> 

<td height='80' width='80'>     
</td> 
   
\n"; 
 
} 

  if ($z_id % $SPALTEN != 0) 
  { 
    echo "  <td colspan = \"". ($z_id % $SPALTEN) ."\">&nbsp;</td>\n"; 
  } 
  echo "  </tr>\n";
  echo "</table>"; 
    
   
   ?>
 
PHP:
$result = mysql_query("SELECT * FROM maschinen WHERE Rubrik='<Wert eintragen>'");

Das "<Wert eintragen>" musste nur noch mit der Nummer ersetzen, welche Rubrik du sehen willst. Lass einfach eine Schleife durchlaufen mit den Nummern oder was du eben machen willst.
 
hm so einfach gehts wohl nicht

so einfach wird es nicht gehen , weil die Rubriken nicht festgelegt sind sondern, ein user kann die mit eingeben.... man brauch irgendwie eine schleife, die erstmal die rubriken sortiert, dann auslesen und in eine tabelle reinpacken... danach müsste es quasi stoppen und dann wieder das gleiche, nur die nächste Rubrik auslesen und wieder in eine Tabelle reinpacken ( mit der Überschrift der Rubrik). Dieser Vorgang muss sich ja dann wiederholen bis keine Rubrik mehr da ist... Wäre sehr dankbar wenn ihr euch nochmal gedanken drüber macht , danke ..

Gruß Stefan
 
Hast du schon mal was von einem Gruppenwechsel gehört?
Würde hier passen.
Mit
PHP:
$result = mysql_query("SELECT * FROM maschinen ORDER BY Rubrik");
alle Einträge nach Rubrikenj Sortiert zurückgeben lassen und dann nach folgender Struktur ausgeben lassen:

Code:
Wenn (Resultset nicht leer)
     Zeile einlesen
Solange (noch Zeilen im Resultset)
        Tabellenkopf
        $Rubrik = Rubrik der aktuellen zeile
        wiederhole 
                 aktuelle Zeile ausgeben
                 wenn (noch Zeilen im Resultset)
                          nächste Zeile einlesen
        bis nicht ($Rubrik == Rubrik der aktuellen zeile)
        Tabellenfuß
wiederhole


Ich denke mal, das würde auf dein Problem so passen. :)
 
vielen Dank

Also erstmal vielen Dank, ich hab nun schon mal den Grundkern welche schleife ich brauch..

nur ich bin mir noch so unsicher ob das so klappt, das mit dem sortieren bzw Gruppenwechsler, das weiß ich ja, nur angenommen ein Benutzer hat die Rubriken.

Obst, Gemüse, Leute

eingeben. wie weiß er denn beim auslesen, das er nur erstmal "gemüse" auslesen soll und dann "Leute" War vielleicht auch mein Fehler weil ich RUbrik 1, 2 und 3 im Beispiel hatte, aber die rubriken gehen nicht nach zählern..

Gruß Stefan
 
Nein, sortieren ist nicht gleich Gruppenwechsel.
Gruppenwechsel bedeutet, dass sich eine(/jede) Gruppe von aufeinander folgenden Einträgen von den folgenden Einträgen durch eine bestimmte Eigenschaft unterscheidet.
Wenn man nach dieser unterscheidet, bekommt man sie einzeln verarbeitet. :)

Im Resultset sind also ALLE Rubriken gruppenweise sortiert. Dabei ist es egal, wie die einzelnen Rubriken heißen.
Nun läufst du durch dieses hindurch und machst jeweis bei einer neuen Gruppe einen neuen Kopf. ;-)
 
Cool

Das habe ich noch nicht gewusst, dass er bei "order by" so ein gruppenwechsel macht, ich werde es nachher gleich mal versuchen in ein Script umzuschreiben.. Vielen Dank und bis später vielleicht ...

:) :) :)

Schöne Grüße

Stefan
 
Kann mir vielleicht jemand nochmal helfen :O)

hmm irgendwie bin ich zu blöd das so umzusetzen in ein Skrikpt, kann mir vielleicht jemand mal helfen;:

PHP:
Wenn (Resultset nicht leer)
     Zeile einlesen
Solange (noch Zeilen im Resultset)
        Tabellenkopf
        $Rubrik = Rubrik der aktuellen zeile
        wiederhole 
                 aktuelle Zeile ausgeben
                 wenn (noch Zeilen im Resultset)
                          nächste Zeile einlesen
        bis nicht ($Rubrik == Rubrik der aktuellen zeile)
        Tabellenfuß
wiederhole

besonders dieses "Solange (noch Zeilen im Resultset)", kommt da "while" hin bzw. wie stelle ich fest das noch Zeilen da sind ....vielleicht kann ja einer ( ich weiß ich bin doof, aber halt noch irgendwo newbie) thx für eure Hilfe
 
PHP:
$sql = "SELECT * FROM maschinen ORDER BY Rubrik";
$result = mysql_query($sql);
$num_rows = mysql_num_rows($result);

if(!empty($num_rows)) {

	//Tabellenanfang
	$rubrik_akt = "";

	//solange Daten im Resultset, werden diese hier durchlaufen
	while($data = mysql_fetch_assoc($result)) {
	
		$rubrik = $data['rubrik'];
			
		if($rubrik != $rubrik_akt) {
			//Ausgabe $rubrik
		}
		
		//Ausgabe des Bildes von diesem Datensatz
		
		//erst hier zuweisen, weil im nächsten Durchlauf 
		//ist dies dann der Wert vom vorigen Datensatz
		//und wenn dieser im nächsten Durchlauf nicht mehr
		//derselbe ist wie die aktuelle Rubrik, dann
		//handelt es sich also um eine neue Rubrik
		//und dann gibts also auch ne neue Überschrift
		$rubrik_akt = $rubrik
	
  	}

	//Tabellenende

}
 
oder etwas verkürzt:

PHP:
$sql = "SELECT * FROM maschinen ORDER BY Rubrik"; 
$result = mysql_query($sql) or die("".mysql_error()); 

//Tabellenanfang 
$rubrik_akt = ""; 

while($data = mysql_fetch_assoc($result)) { 
     
        $rubrik = $data['rubrik']; 
             
        if($rubrik != $rubrik_akt) { 
            //Ausgabe $rubrik 
        } 
         
        //Ausgabe des Bildes von diesem Datensatz 
         
        //erst hier zuweisen, weil im nächsten Durchlauf 
        //ist dies dann der Wert vom vorigen Datensatz 
        //und wenn dieser im nächsten Durchlauf nicht mehr 
        //derselbe ist wie die aktuelle Rubrik, dann 
        //handelt es sich also um eine neue Rubrik 
        //und dann gibts also auch ne neue Überschrift 
        $rubrik_akt = $rubrik 
     
 //Tabellenende 

}
 
Zurück