Dominik Stiefermann: MySQL - Abfrage aus 2 Tabellen

Guten Nabend,

Ich habe 3 Tabellen ->
1. User/Studenten (vw_students)
2. Veranstaltungen (vw_events)
3. Verknüpfungstabelle für 1 und 2 (vw_link)

Für die Veranstaltungen (vw_events) können sich User aus der 1. Tabelle anmelden. Diese Verknüpfun findet in der 3 Tabelle statt -> BSP: id=1; matrikelnr=7777777; event_nr=22222
Also besucht der User 7777777 die Veranstaltung 22222.

Ich möchte nun folgende Ausgabe realisieren: Alle Veranstaltungen werden ausgegeben (Kein Problem!). In diese Anzeige soll allerdings ebenfalls ausgegeben werden Wieviele User schon für dieses Event angemeldet sind. Also wieviele haben in vw_link den die Veranstaltungsnummer 222222???

Wie kann ich das realisieren. Ich habe es mit eienr Abfrage in einer Abfrage probiert. Aber das funktioniert nicht - oder habe ich einen Denkfehler?
Hier mal ein Auszug aus meinen Script:
-----------------------------------------------------------------
$event_s = "SELECT * FROM vw_events ORDER BY event_nr ASC";
$event_q = $SQL->SQLquery($event_s);

while($event_a = $SQL->SQLarray()) {

// Hier beginnt die Schleife in der Schleife

$free_s = "SELECT count(*) FROM vw_link WHERE event_nr=event_a['event_nr']";
$free_q = $SQL->SQLquery($free_s);

// Hier endet die Schleife in der Schleife

echo "Bla, bla - Veranstaltungsdaten
      ANGEMELDETE BENUTZER: $free_a ";
// um dise Ausgabe geht es!!!

}
------------------------------------------------------------------
Vielleicht hat jemand ne Idee. Ih bin mir sogar sicher, dass so ist denn ich hab da nicht den wirklichen Plan. Vielen Dank!!!

Schönen Abend, Dominik S.

  1. Hallo,

    Ich würde es so machen (so hab ich es auch bei meinem Board gemacht umd die Threads zu zählen):

    $GuestArray = mysql_query ("SELECT * FROM vw_link") or die ("Select Failed!");
    $Total = mysql_num_rows ($GuestArray);

    while ($Guest = mysql_fetch_array ($GuestArray)) {

    // Wenn keine Anmeldugen Vorhanden abgegeben wurden dann auf null stellen
      if($anmeldungen[$Guest[event_nr]] == "")$anmeldungen[$Guest[event_nr]] = 0;
      //Und dann die der event_nr ensprechende Variable um eins erhöhen
      $anmeldungen[$Guest[event_nr]]++;

    }

    $GuestArray = mysql_query ("SELECT * FROM vw_events") or die ("Select Failed!");
    $Total = mysql_num_rows ($GuestArray);

    while ($Data = mysql_fetch_array ($GuestArray)) {

    echo "Das Event ".$Data[event_nr]." hat ".$anmeldungen[$Data[event_nr]]." Anmeldungen";

    }

    so sollte es gehen!

    samy,

  2. Um nur die angemeldeten Studenten aus vw_link auszulesen:
    "SELECT event_nr, COUNT(*) FROM vw_link GROUP BY event_nr ORDER BY event_nr;"
    Das sollte eigentlich (...) ein Resultat zurückgeben, in dem zu jedem Event die Anzahl angemeldeter Studenten zurückgeliefert wird. Leider sind so Events ohne Anmeldung nicht im Resultat enthalten... das ginge theoretisch mit einem outer join, allerdings stehe ich da gerade selber auf der Leitung :(