[MySQL] 3 vrkn.Tabellen: eine zeile mit mehreren unterzeilen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
mellow
Mitglied
Beiträge: 277
Registriert: 13.05.2004 15:36

[MySQL] 3 vrkn.Tabellen: eine zeile mit mehreren unterzeilen

Beitrag von mellow »

Hmm also im Forum schreib ich grad an einem neuen Feature. Mit dem Befehl:

Code: Alles auswählen

$sql = 'SELECT chart_id, chart_hot, chart_not, chart_song_name, chart_artist, chart_album, chart_audio, chart_pic, chart_link, chart_datum, chart_last_pos, chart_best_pos, username FROM '. phpbb_charts .', '. USERS_TABLE .' WHERE chart_poster_id=user_id ORDER BY (chart_hot-chart_not) DESC, chart_artist LIMIT 0,'.$v_num;
wird aus 2 tabellen eine abfrage erstellt, die dann ungefähr so aussieht:

Code: Alles auswählen

1. TRACK - COVER - ... - gepostet von USERNAME A - BEWERTUNG 5
2. TRACK - COVER - ... - gepostet von USERNAME B - BEWERTUNG 4
3. TRACK - COVER - ... - gepostet von USERNAME A - BEWERTUNG 3
.
.
.

ich hab jetzt noch eine dritte Tabelle in der ich die einzelnen Tracks bewerte. die bewertungen sollen über eine dropdownbox unter dem jeweiligen track stehen. eingabe und dropdownbox funktioniert. nur die Ausgabe nicht!

statt

Code: Alles auswählen

1. TRACK - COVER - ... - gepostet von USERNAME A - BEWERTUNG 5
 ------ kommentar 1
 ------ kommentar 2
2. TRACK - COVER - ... - gepostet von USERNAME B - BEWERTUNG 4
 ------ kommentar 3
3. TRACK - COVER - ... - gepostet von USERNAME A - BEWERTUNG 3
 ------ kommentar 4
 ------ kommentar 5
 ------ kommentar 6
.
.
.

kommt nur grütze raus.


wie muss ich die sql-abfrage gestalten, dass das rauskommt, was ich will.

sofern ich die dritte tabelle mit einer zweiten abfrage mit einbinde:

Code: Alles auswählen

$sql = 'SELECT * FROM '. phpbb_charts .', '. phpbb_charts_comments .' WHERE chart_id=comm_chart_id ORDER BY datum DESC';

zeigt er mir nur den ersten track ohne daten (also nur 1 - ) - da geht dann garnix mehr.
mellow
Mitglied
Beiträge: 277
Registriert: 13.05.2004 15:36

Beitrag von mellow »

Knapp 24h später mein Aufruf nach einem Ansatzpunkt! Ich sterbe hier und sitze schon seit 64h an dem Problem!
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Teste das ganze mal mit LEFT JOIN:

Code: Alles auswählen

$sql = 'SELECT *
   FROM tracks t, users u
   LEFT JOIN comments c
      ON c.track_id = t.track_id
   WHERE ...
das ganze musst du dann in deiner While-Schleife nach der Track-ID gruppieren, z.B. so:

Code: Alles auswählen

$tracks = $comments = array();
while ($row = $db->sql_fetchrow($result))
{
   if (!isset($tracks[$row['track_id']]))
   {
      $tracks[$row['track_id']] = $row;
   }

   if (!isset($comments[$row['track_id']]))
   {
      $comments[$row['track_id']] = array($row);
   }
   else
   {
      $comments[$row['track_id']][] = $row;
   }
}
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
mellow
Mitglied
Beiträge: 277
Registriert: 13.05.2004 15:36

Beitrag von mellow »

Würde es dir etwas ausmachen, wenn ich dir die ganze charts.php schicke und du mal kurz drüber schaust? Weil so ganz blick ich da noch nicht durch.
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Verlink sie an besten hier (KB:datei), dann können sich das auch andere anschauen, da ich im Moment nicht sonderlich viel Zeit habe.
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
mellow
Mitglied
Beiträge: 277
Registriert: 13.05.2004 15:36

Beitrag von mellow »

also die sql sieht ganz ordentlich aus. ohne die gruppierung zeigt er mir nun die track-zeilen so oft an, wie es comments für den track gibt ... mit den anderen. war vorher nicht der fall.

die gruppierung aber bereitet mir kopfschmerzen.
mit isset prüfe ich ob eine variable existiert. aber was bewirkt array($row)und $row? In die if-Schleifen müsste ich ja den ganzen momentanen Ausdruck reinschreiben. wie mach ich die Ausgabe der Comments? genauso wie die charts? da ist das im moment so geregelt:

Code: Alles auswählen

$template->assign_block_vars('chart_block', array(
...
); 
also dann

Code: Alles auswählen

$template->assign_block_vars('comment_block', array(
...
); 
und in der template die steuerung über

Code: Alles auswählen

<!-- BEGIN comment_block -->

...

<!-- END comment_block -->
in der dropdownbox?
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Code: Alles auswählen

foreach ($tracks as $track_id => $track)
{
   // Ausgabe des Tracks ($track)

   // Gibt es Kommentare?
   if (isset($comments[$track_id]))
   {
      foreach ($comments[$track_id] as $comment)
      {
         // Ausgabe des Kommentars ($comment)
      }
   }
}
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Antworten

Zurück zu „Coding & Technik“