MySql und Ausgabe
Nicole
- php
Hi Mädels und Jungs,
nun komm ich doch nicht ohne eure Hilfe weiter.
Ich habe eine MySql Datenbank. In dieser ist eine Tabelle mp3 mit 10 Feldern (Interpret, Titel, usw.). Auf einer Übersichtsseite soll via php und mysql der Inhalt aufgelistet werden.
Soweit funktioniert das auch.
Nur mein Problem ist, das wenn zum Beispiel ein Interpret mehrfach einen Eintrag in der DB hat, das dieser auch mehrfach ausgegeben wird. Ziel ist es aber in der Übersichtsseite alle Interpreten nur einmal auszugeben, und per Link auf die Detailsseite dann alle Titel und Infos zu dem Interpreten aufgelistet werden sollen.
Ich habe keinen Ansatz, und möchte bitte keine Lösung nur einen Tip wie ich das verhindern kann.
Vielen Dank für weitere Fragen würde ich mich bei euch melden. Der Code wie ich es jetzt ausgebe.
Code:
....
$select = "SELECT * FROM mp3";
$result = mysql_db_query ( $db, $select);
while ( $ausgabe = mysql_fetch_object ( $result)
{
echo $ausgabe->Interpret . " <br> " .
$ausgabe->Bildpfad . " <br> " .
$ausgabe-> .................... ;
}
..........
Schau mal nach der mySQL Funktion DISTINCT :-)
Hi,
$select = "SELECT * FROM mp3";
$result = mysql_db_query ( $db, $select);while ( $ausgabe = mysql_fetch_object ( $result)
{
echo $ausgabe->Interpret . " <br> " .
$ausgabe->Bildpfad . " <br> " .
$ausgabe-> .................... ;}
weiss nicht ob DISTINCT ohne weitere angaben soviel hilft, und "wirkt" meines wissens nur bei einem/auf das erste Feld der Abfrage: das muss dann also interpret sein.
DISTINCT hat eine ähnliche Wirkung wie GROUP BY und entfernt dir u.U. Datensätze, die du anzeigen willst, namentlich die Titel.
Du bekommst dann also nur immer den ersten (gefunden) Titel eines Interpreten ausgegeben.
In jedem Fall wäre mal eine Gruppierung und Sortierung hilfreich, z.B.
SELECT * FROM mp3 GROUP BY interpret ORDER BY interpret, titel
Falls noch nicht getan, leg auf beide Felder (interpret, titel) auch einen index, damit es schneller geht.
Wenn du die Interpreten als 'ne Art Überschrift ausgeben willst, dann bleibt dir nix anderes übrig, als sie dir auf PHP Seite zu merken. Ist der Name gleich, wird er ncht nochmal ausgegeben, sonern nur der Titel.
$Interpret = '';
while ( $ausgabe = mysql_fetch_object ( $result)
{
if (strtolower($ausgabe->Interpret) != strtolower($Interpret) ) {
echo "<b>" . $ausgabe->Interpret . " </b> <br /> " .
}
echo $ausgabe->Bildpfad . " <br /> " .
$ausgabe-> .................... ;
// merken
$Interpret = $ausgabe->Interpret;
}
Du kannst die Namen des letzen und aktuellen Interpreten auf verschiedene Weise vergleichen, strtolower() ist die billige Version. Sinnvoll wäre natürlich eine eigene Tabelle für die Interpreten, so dass du nur die Datensatznummer vergleichen musst. Würde weniger Fehler verursachen und die Namen wäre immer konsistent.
JOINs sind aber ne andere Baustelle :-)
Viel Spaß,
CirTap
Nur mein Problem ist, das wenn zum Beispiel ein Interpret mehrfach einen Eintrag in der DB hat, das dieser auch mehrfach ausgegeben wird. Ziel ist es aber in der Übersichtsseite alle Interpreten nur einmal auszugeben, und per Link auf die Detailsseite dann alle Titel und Infos zu dem Interpreten aufgelistet werden sollen.
Ich habe keinen Ansatz, und möchte bitte keine Lösung nur einen Tip wie ich das verhindern kann.
du brauchst 2 masken.
die erste für die übersicht aller interpreten.
die zweite bei einem klick auf einen interpreten der ersten maske.
das ganze nennt sich auch 1:n.
das gleiche bildest du in der datenbank ab.
eine tabelle, welche nur die interpreten beinhaltet, für die erste maske.
eine tabellle wie sie jetzt schon ist, für die zweite maske.