PHP/MySQL und Rubriken überschrift

Ich stehe vor folgendem Problem:

Ich habe Tabelle(Rubriken) mit Rubriken angefertigt:

ID|Rubrik_Name
1 |Videos
2 |CD
3 |DVD
.
.
.

In einer Anderen Tabelle werden Interpreten/Künstler sortiert:

ID| Künstler/Interpret
Videos|Künstler1
CD|Künstler2
Videos|Künstler3
.
.

Mit "INNER Join" wird den IDs in der letzten Tabelle der Rubrikname übergeben.

Nun möchte ich zusätzlich eine Sortierung nach Rubriken erhalten. Ungefähr so:

Videos: (Überschrift)

Künstler1
Künstler3

CD:

Künstler2


DVD:

....


Wie kann ich das bewerkstelligen? Ich bin schon so weit, dass ich ich die Ausgaben hinbekomme:

Video|Künstler1
Video|Künstler3
CD|Künstler2


Möchte aber über die Überschriften eine andere Art der Sortierung erreichen. Die Daten liegen, wie gesagt, in 2 Tabellen.
 
die 2. tabelle sollte wohl eher so aussehen
Code:
ID	| Künstler/Interpret	| Rubrik
1	|Künstler1		|1
2	|Künstler2		|2
3	|Künstler3		|1
also in der spalte rubrik steht jeweils die rubrik id aus der ersten tabelle

wenn du dann deine rubriken mit künstlern auflisten willst, holst dir die id (und den rubriknamen für deine überschrift) aus der ersten tabelle
und über die id holst du dir dann aus der zweiten tabelle die enstprechenden künstler dieser rubrik
damit du deine gewünschte ausgabe erhällst, muss das ganze ungefähr so aussehen
PHP:
// überschriften und ids holen
SELECT id, rubrik_name FROM Rubriken;
for schleife1 
{ ... für jede sql-ergebnis-reihe ...
	// überschrift ausgeben
	// id zwischenspeichern und darüber die Künstler der rubrik holen
	SELECT Künstler/Interpret FROM Interpreten/Künstler WHERE Rubrik = $rubrikID;
	for schleife2 { ... für jede sql-ergebnis-reihe ...
		// künstler ausgeben 
	}
}
 
Zwei SQL-Statements, wie von ivegotmail beschrieben, sind ziemlich perfomancelastig (führt zu langsamen Aufbau der Seite bei langsamen oder stark beschäftigtem Server), gerade wenn diese dann noch rekursiv abgearbeitet werden und es viele Daten sind. Probiers mal so (hab ich ausm Kopf geschrieben, muss nicht 100%ig stimmen), vorausgesetzt du nutzt php und mysql und möchtest nach "rubrik_name" sortieren:

Code:
$sql="SELECT r.id as rubrik_id,r.rubrik_name,i.interpret_name FROM rubriken as r, interpreten as i where i.rubrikID = r.id order by r.rubrik_name asc, interpret_name desc;";
$result = mysql_query($sql);
echo "<table>";
while($rows=mysql_fetch_array($result))
{
echo "<tr>";
if($lastname==$rows[rubrik_id])
   {
      echo "<td></td><td>".$rows[interpret_name]."</td>";
   }
else
   {
      echo "<td>".$rows[rubrik_name]."</td><td>".$rows[interpret_name]."</td>";
   }
$lastrubr=$rows[rubrik_id];
echo "</tr>";
}
echo "</table>";

Stellt also wenn es sich um die gleiche Rubrik wie bereits zuvor handelt nicht nochmal den Rubriknamen dar. Die Sortierung erfolgt wegen dem "order" primär nach dem Rubriknamen, Sekundär nach dem Internetnamen.

So in etwa ....

Viele Wege führen nach Rom :D
 
hab ich nicht ganz gerafft...

ich habe aber auch den anspruch, dass die rubriken erweiterbar sind. dazu lege ich einen schlüssel an, der sich erweitert -wie eine kundennummer-

in der anderen tabelle sind nun die künstler enthalten. es gibt dort eine spalte in der die einträge noch den rubriken zugeordnet werden.

also (ID steht für die Rubrik):

ID | Künstler/Interpret
1 |Künstler1
2 |Künstler2
3 |Künstler3


nun soll es eine ausgabe geben, die alle daten ausgibt. nach den rubriken soll diese ausgabe sotiert sein. die rubriken dienen als überschriften. darunter sind dann die jeweiligen künstler (künstlertabelle) aufgelistet.
ist dies abgeschlossen, wird die nächte rubrik abgearbeitet. wenn alle rubriken abgearbeitet sind, ist ende. wie schon gesagt, die rubriken sollen von der anzahl nicht statisch sein...

ich habe jetzt immer versucht, mit zwei verschachtelten while-schleifen zu arbeiten.
PHP:
<?php
$sql = "SELECT
    		r.id_rubrik,
         	r.rubrik as rubrikNAME
	FROM
         	rubrik as r
         ORDER BY
         	rubrikNAME ASC";

$result = mysql_query($sql) OR die(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
  $rubrik = $row['rubrikNAME'];

  echo "rubrik:".$row_rubrik['rubrikNAME']." <br>\n";

  $sql = "SELECT

                 k.id_rubrik,
                 k.kuenstlerNAME as kuenstler
         FROM
		kuenstler as k
         INNER JOIN rubrik ON r.id_rubrik=k.id_rubrik
         WHERE
		k.id_rubrik = $rubrik
         ORDER BY
         	rubrikNAME ASC";

$result = mysql_query($sql) OR die(mysql_error());

  while ($row = mysql_fetch_assoc($result)) {


    	echo .$row['kuenstler']."<br> \n";
    echo "<br><br>";


  }
}
  echo "</table>\n";
  echo "</div>\n";
?>
 
Zurück
Oben