Verschiedene MySQL-Tabellen vergleichen

WebMarco

Mitglied
Guten Abend,

meine Absicht ist es, Termine zu erstellen, zu denen sich bereits regestrierte Benutzer zu- bzw. absagen können.

[benutzer]
id | nachname | vorname
---------------------------------------------------------
1 | Name 1 | Vorname 1
2 | Name 2 | Vorname 2
3 | Name 3 | Vorname 3

[termine]
id | termin
----------------------------
1 | Termin 1
2 | Termin 2
3 | Termin 3

[termine_teilnehmer]
id | benutzer_id | termine_id | teilnahme (1 = nimmt teil, 0 = nimmt nicht teil)
---------------------------------------------------------------------------------------------------------------------------------
1 | Name 1 | Termin 1 | 1
2 | Name 1 | Termin 2 | 0
3 | Name 3 | Termin 1 | 1

Der Benutzer "Name 1" nimmt an der Veranstaltung "Termin 1" teil und an "Termin 2" nicht teil. Der Benutzer "Name 3" nimmt an der Veranstaltung "Termin 1" teil. Auf der Termin-Seite, wo die Termine alle aufgelistet sind, sollen jeweils unter dem jeweiligen Termin die Benutzer aufgelistet werden, die teilnehmen und nicht teilnehmen. Der eingeloggte Benutzer kann jeweils bei jedem Termin angeben, ob er teilnimmt oder nicht. Dabei befüllt er die MySQL-Tabelle "termine_teilnehmer".

Mein Lösungsansatz ist:

Abfrage:

PHP:
function termine_teilnehmer( $conid )
{
    if ($conid)
    {
        $sql = "SELECT
                    benutzer.*,
                    termine.*,
                    termine_teilnehmer.*
                FROM
                    termine_teilnehmer
                    JOIN benutzer
                        ON termine_teilnehmer.benutzer_id = benutzer.id
                    JOIN termine
                        ON termine_teilnehmer.termine_id = termine.id";
        $ergebnis = mysql_query( $sql, $conid );
        if (@mysql_num_rows( $ergebnis ) > 0)
        {
            while ($zeile = mysql_fetch_array( $ergebnis ))
            {
                $datensatz[$zeile['id']]['id']        = $zeile['id'];
                $datensatz[$zeile['id']]['nachname']  = $zeile['nachname'];
                $datensatz[$zeile['id']]['vorname']   = $zeile['vorname'];
                $datensatz[$zeile['id']]['teilnahme'] = $zeile['teilnahme'];
            }
        }

        mysql_free_result( $ergebnis );
        return $datensatz;
    }
}

Ausgabe:

PHP:
  function dtstatus($m)
    {
      switch ($m)
        {
          case 1: echo'nimmt teil';
          break;
          case 0: echo'nimmt leider nicht teil';
          break;
        }
      }

// Termine
if (is_array($termine))
{
  foreach ($termine as $eintrag)
  {
    echo ' ' . $eintrag['termin'] . ' ';
// Benutzer ist eingeloggt
    if (isset ($_SESSION['user_id'])) {
    echo ' <h2>Teilnehmermeldungen</h2><br /> ';
    echo ' <ul> ';
      foreach ($termine_teilnehmer as $eintrag)
      {
    echo ' <li>' . $eintrag['vorname'] . ' ' . $eintrag['nachname'] . ' ';
    dtstatus($eintrag['teilnahme']);
    echo ' </li> ';
      }
    echo ' </ul> ';
    }
    echo ' </div><br /> ';
  }
}
else { echo ' <hr/>Keine Termine verfügbar. '; }

Mein Problem ist nun, dass unter jedem Termin alle Zu- bzw. Absagen (sprich alle Einträge der Tabelle "termine_teilnehmer") angezeigt werden. Es sollen jedoch nur jeweils die Zu- bzw. Absagen angezeigt werden, die dem Termin zugeordnet sind (termine.id = termine_teilnehmer.termine_id).

Ausgabebeispiel
termine.jpg

Ich habe jetzt wirklich alles Mögliche probiert, jedoch bekomme ich es einfach nicht hin. Ich finde einfach keine Lösung. Habe auch schon ausgiebig Google verwendet. Weiß jedoch ehrlich gesagt nicht, wo genau das Problem liegt und wie ich danach suchen sollte.

Wenn mir jemand weiterhelfen könnte, wäre ich echt dankbar.
 
$zeile['id'] : Welche id der 3 ids wird da verwendet? Bei solchen SELECT sollte man kein * in der AUsgabe haben. So weisst du nicht welche ID dass MySQL nimmt.


Mach doch mal ein var_dump() auf $termine_teilnehmer as und poste das hier. Dann sehen wir weiter
 
var_dump($termine_teilnehmer);

Code:
array(4) { [1]=> array(3) { ["nachname"]=> string(7) "XXX" ["vorname"]=> string(5) "Marco" ["teilnahme"]=> string(1) "1" } [2]=> array(3) { ["nachname"]=> string(7) "XXX" ["vorname"]=> string(5) "Marco" ["teilnahme"]=> string(1) "1" } [3]=> array(3) { ["nachname"]=> string(7) "XXX" ["vorname"]=> string(5) "Marco" ["teilnahme"]=> string(1) "0" } [4]=> array(3) { ["nachname"]=> string(7) "XXX" ["vorname"]=> string(7) "Andreas" ["teilnahme"]=> string(1) "0" } }

Das $zeile['id'] bringt mich jetzt selber zum grübeln. Die ID der termine_teilnehmer ist ja belanglos. Ich habe zur Probezwecken folgende Variante in der Datenbank angelegt:

Termin 1: Marco nimmt teil, Andreas nimmt nicht teil
Termin 2: Marco nimmt teil
Termin 3: Marco nimmt nicht teil

Diese Zuordnung soll nun bei den jeweiligen Terminen erscheinen, wobei der Name (Vor- und Nachname) aus der benutzer-Tabelle, die Termine aus der termine-Tabelle und die Informationen, ob Zu- oder Absage aus der termine_teilnehmer-Tabelle gewonnen werden.

Ziel müsste ja sein: Anzeige jeweiliger Benutzer bei termine_teilnehmer_id = termine_id
Die ID der Termine wird beim Anlegen dieser automatisch vergeben. Klickt der Benutzer bei dem jeweiligen Termin auf Zu- oder Absagen wird die IP dieses betreffenden Termines in die Tabelle termine_teilnehmer Spalte termine_id eingetragen. So soll dann entsprechend die Zuordnung stattfinden.

Die Tabellen der MySQL:

benutzer.jpg

termine.jpg

termine_teilnehmer.jpg

Gewünschtes Ergebnis:

gewuenschtes-Ergebnis.jpg

Es werden jedoch leider bei jedem Termin jeweils alle Eintrage der termine_teilnehmer angezeigt. Es klappt zumindest das Übernehmen der Namen aus der Tabelle benutzer und die entsprechende Zu- oder Absage passt auch,...
 
Zuletzt bearbeitet:
Ich sehe grad, dass du in verschachtelten Schleifen jeweils $eintrag abfüllst. Die überschreiben sich gegenseitig!

Schau dir dein var_dump() mal genau an
Code:
array(4) { 
	[1]=> array(3) { 
		["nachname"]=> string(7) "XXX" 
		["vorname"]=> string(5) "Marco" 
		["teilnahme"]=> string(1) "1" 
	} 
	[2]=> array(3) { 
		["nachname"]=> string(7) "XXX" 
		["vorname"]=> string(5) "Marco" 
		["teilnahme"]=> string(1) "1" 
	} 
	[3]=> array(3) { 
		["nachname"]=> string(7) "XXX" 
		["vorname"]=> string(5) "Marco" 
		["teilnahme"]=> string(1) "0" 
	} 
	[4]=> array(3) { 
		["nachname"]=> string(7) "XXX" 
		["vorname"]=> string(7) "Andreas" 
		["teilnahme"]=> string(1) "0" 
	} 
}
Da fehlt doch die Information um welchen Termien es geht. Darum gibst du jedesmal den ganzen Inhalt aus

Ich würde den Array so zusammenbauen
PHP:
$data['id']        = $zeile['benutzer_id'];
$data['nachname']  = $zeile['nachname'];
$data['vorname']   = $zeile['vorname'];
$data['teilnahme'] = $zeile['teilnahme'];
$datensatz[$zeile['termin_id']][$zeile['benutzer_id']] = $data;

//Du knnst eigentich auch direkt $zeile anstelle von $data anhängen:
$datensatz[$zeile['termin_id']][$zeile['benutzer_id']] = $zeile;

Das gibt die ein verschachtelter Array der im ersten Level die Termine zusammenfast
Und so kannst du nachher die Benutzer pro Termin auslsesen
PHP:
foreach ($termine as $termin)
	foreach ($termine_teilnehmer[$termin['termin_id']] as $benutzer){
		echo $benutzer['nachname'];
	}
}
 
Dein Problem ist diese Schleife hier:
PHP:
foreach ($termine_teilnehmer as $eintrag)
{
    echo ' <li>' . $eintrag['vorname'] . ' ' . $eintrag['nachname'] . ' ';
    dtstatus($eintrag['teilnahme']);
    echo ' </li> ';
}
Du gehst hier jede Person, nicht nur wie gewollt jeden Teilnehmer durch und lässt dir dann mit dtstatus() das Ergebnis ausgeben. D.h. der Parser wird dir so und so alles ausgeben.

Jetzt gibts mehrere Möglichkeiten das zu beheben:
  • du baust noch einen WHERE-Befehl in deinen sql-string ein mit dem du dir nur die Teilnehmer oder nur die Personen die nicht teilnehmen ausgeben lässt
  • du fügst eine weitere Schleife in deinen Code ein und prüfst innerhalb der schleifen:
PHP:
echo '<h2>Teilnehmer</h2>';
echo ' <ul> ';
foreach ($termine_teilnehmer as $eintrag)
{
    if(dtstatus($eintrag['teilnahme']) == 'nimmt teil')
    {
        echo ' <li>' . $eintrag['vorname'] . ' ' . $eintrag['nachname'] . ' ';
        dtstatus($eintrag['teilnahme']);
        echo ' </li> ';
    }
}
echo ' </ul> '; 
echo '<h2>Personen die nicht teilnehmen</h2>';
echo ' <ul> ';
foreach ($termine_teilnehmer as $eintrag)
{
    if(dtstatus($eintrag['teilnahme']) == 'nimmt leider nicht teil')
    {
        echo ' <li>' . $eintrag['vorname'] . ' ' . $eintrag['nachname'] . ' ';
        dtstatus($eintrag['teilnahme']);
        echo ' </li> ';
    }
}
echo ' </ul> ';

Beim zweiten Beispiel würde sich auch anbieten, die Funktion dtstatus einen Boolean-Wert ausgeben zu lassen!

PS: Da war ich wohl zu langsam! :D Ich lass mal trotzdem stehen.
 
Zuletzt bearbeitet:
Guten Abend,

erst einmal vielen Dank für die schnelle Hilfe und die Bemühungen. Ich habe jetzt beide Lösungsansätze einzeln probiert, jedoch nicht das gewünschte Ergebnis erhalten. Es werden immer noch bei jedem Termineintrag alle Zu- und Absagen der einzelnen Termine angezeigt.

Ich habe den Ansatz von fbfeix dahingehend schon einmal übernommen, dass ich die Anzeige nach Teilnehmer und Absagen trenne. Logisch!

Die aktuelle Ausgabe sieht wie folgt aus:
ausgabe.jpg

Leider fehlt noch immer die Zuurdnung der Zu- bzw. Absagen der Benutzer zu dem JEWEILIGEN Termin, so wie es Yaslaw bereits erkannt hat. Leider bekomme ich seinen Lösungsvorschlag nicht umgesetzt. Als ich diesen direkt übernommen hatte, wurde auch wieder alles ausgegeben.

SQL-Abfrage:

PHP:
// Termine
function termine( $conid )
{
    if ($conid)
    {
        $sql = "SELECT * FROM `termine` ORDER BY `id` desc";
        $ergebnis = mysql_query( $sql, $conid );
        if (@mysql_num_rows( $ergebnis ) > 0)
        {
            while ($zeile = mysql_fetch_array( $ergebnis ))
            {
// gekürzt ANFANG
                $datensatz[$zeile['id']]['id']            = $zeile['id'];
                $datensatz[$zeile['id']]['USW']   = $zeile['termine_USW'];
// gekürzt ENDE
            }
        }

        mysql_free_result( $ergebnis );
        return $datensatz;
    }
}

// Termine Teilnehmermeldungen
function termine_teilnehmer( $conid )
{
    if ($conid)
    {
        $sql = "SELECT
                    benutzer.*,
                    termine.*,
                    termine_teilnehmer.*
                FROM
                    termine_teilnehmer
                    JOIN benutzer
                        ON termine_teilnehmer.benutzer_id = benutzer.id
                    JOIN termine
                        ON termine_teilnehmer.termine_id = termine.id";
        $ergebnis = mysql_query( $sql, $conid );
        if (@mysql_num_rows( $ergebnis ) > 0)
        {
            while ($zeile = mysql_fetch_array( $ergebnis ))
            {
                $datensatz[$zeile['id']]['id']        = $zeile['id'];
                $datensatz[$zeile['id']]['nachname']  = $zeile['nachname'];
                $datensatz[$zeile['id']]['vorname']   = $zeile['vorname'];
                $datensatz[$zeile['id']]['teilnahme'] = $zeile['teilnahme'];
            }
        }

        mysql_free_result( $ergebnis );
        return $datensatz;
    }
}

// Termine laden
$termine = termine( $conid );

// Termine Teilnehmermeldungen laden
$termine_teilnehmer = termine_teilnehmer( $conid );

Ausgabe-Quelltext:

PHP:
<?php

// Termine
if (is_array($termine))
{
  foreach ($termine as $eintrag)
  {
// gekürzt ANFANG
    echo ' <p>' . $eintrag['INHALTE AUS DER TABELLE termine'] . '</p> ';
// gekürzt ENDE
    if (isset ($_SESSION['user_id']))
    {
    echo ' <h2>Teilnehmer</h2><br /> ';
    echo ' <ul class="ul"> ';
    foreach ($termine_teilnehmer as $eintrag)
      {
      if($eintrag['teilnahme'] == '1')
        {
        echo ' <li class="li-quadrat">' . $eintrag['vorname'] . ' ' . $eintrag['nachname'] . '</li> ';
        }
      elseif($eintrag['teilnahme'] != '0')
        {
        echo ' <li class="li-none">Es gibt noch keine Teilnehmer.</li> ';
        }
      }
      echo ' </ul> '; 
      echo ' <h2>Absagen</h2><br /> ';
      echo ' <ul class="ul"> ';
    foreach ($termine_teilnehmer as $eintrag)
      {
      if($eintrag['teilnahme'] == '0')
        {
        echo ' <li class="li-quadrat">' . $eintrag['vorname'] . ' ' . $eintrag['nachname'] . '</li> ';
        }
      elseif($eintrag['teilnahme'] != '1')
        {
        echo ' <li class="li-none">Es gibt noch keine Absagen.</li> ';
        }
      }
      echo ' </ul> '; 
    }
    echo ' </div><br /> ';
  }
}
else { echo ' <hr/>Keine Termine verfügbar. '; }

?>

Ich denke, es müsste, wie es fbfeix vorgeschlagen hat, mit einem WHERE-Befehl in der SQL-Abfrage funktionieren. Habe ich jetzt auch bis heute in die frühen Morgenstunden probiert. Ich weiß aber leider nicht, wie ich die "id" der Tabelle termine mit der "termine_id" der Tabelle termine_teilnmehmer mit einander abgleichen kann.

Sprich: WHERE termine.id = termine_teilnehmer.termine_id

Wenn Ihr weitere Hilfestellungen und Denkanstöße habt, so bin ich Euch wirklich sehr dankbar.

P.s. als ich mir die Ausgabe des var_dump() genauer angeschaut habe, habe ich sehr gut nachvollziehen können, dass eben die Information der ID fehlt. Vielen Dank für den Tipp!
 
Guten Morgen,

1. mal: Funktionen besser kommentieren. So früh am morgen steigt doch da keiner durch ;)

Aber zum Thema:

Probier mal das als deine termine_teilnehmer-Funktion (muss von dir noch angepasst werden):
PHP:
function termine_teilnehmer( $conid, bool $teilnahme = 1)
{
    if ($conid)
    {
       /* $sql = "SELECT
                    benutzer.*,
                    termine.*,
                    termine_teilnehmer.*
                FROM
                    termine_teilnehmer
                    JOIN benutzer
                        ON termine_teilnehmer.benutzer_id = benutzer.id
                    JOIN termine
                        ON termine_teilnehmer.termine_id = termine.id";
		*/
		$sql = "SELECT USR.id, USR.nachname, USR.vorname 
				FROM benutzer USR JOIN termine TMR JOIN termine_teilnehmer TMR_USR
				ON USR.id = TMR_USR.benutzer_id AND TMR.id = TMR_USR.termine_id
				WHERE TRM_USR.teilnahme = ".$teilnahme;
		
        $ergebnis = mysql_query( $sql, $conid );
        if (@mysql_num_rows( $ergebnis ) > 0)
        {
            while ($zeile = mysql_fetch_array( $ergebnis ))
            {
                /*
                $datensatz[$zeile['id']]['id']        = $zeile['id'];
                $datensatz[$zeile['id']]['nachname']  = $zeile['nachname'];
                $datensatz[$zeile['id']]['vorname']   = $zeile['vorname'];
                $datensatz[$zeile['id']]['teilnahme'] = $zeile['teilnahme'];
                */

                $datensatz[] = $zeile;
            }
        }

        mysql_free_result( $ergebnis );
        return $datensatz;
    }
}
 
Guten Morgen fbfeix,

ich habe gerade Deinen Lösungsvorschlag versucht umzusetzen, bekomme aber bei jeder Konstellation immer Fehlermeldungen oder ein falsches Ergebnis. Ich möchte an dieser Stelle die einzelnen Fehlermeldungen nicht weiter ausführen, da man diese ja auch direkt googlen kann. Ich glaube aber, dass mit Deinem Lösungsvorschlag mein gewünschtes Ausgabeziel auch noch nicht erreicht wird. Ich möchte auf jeden Fall alle Namen ausgeben, die zu- oder abgesagt haben, nicht nur jene, die zusagen.

Ich habe mal weiter geforscht, weiß aber nicht, ob diese "einfache" JOIN-Verbindung mir hilft. Ich schreibe es mal einfach so aus, wie ich die Funktion verstehe, besser gesagt, wie ich möchte, dass diese dann ausgeführt wird ;)

PHP:
function termine_teilnehmer $conid)
{
    if ($conid)
    {

$sql ="
SELECT
  /* die erforderlichen Benutzerdaten */
  benutzer.id,
  benutzer.vorname,
  benutzer.nachname,
  /* die ID der Tabelle Termine, um die Zu- und Absagen dem jeweiligen Termin zuzuordnen */
  termine.id,
  /* Werte aus der Tabelle termine_teilnehmer */
  termine_teilnehmer.id,
  /* benutzer_id wird eingetragen in Abhängigkeit des eingeloggten Benutzer, der zu- bzw. absagt */
  termine_teilnehmer.benutzer_id,
  /* termine_id wird in Abhängigkeit, zu welchem Termin zu- bzw. abgesagt, eingetragen */
  termine_teilnehmer.termine_id,
  /*hier sind zwei Werte möglich, 0 = Absage, 1 = Zusage */
  termine_teilnehmer.teilnahme

/* ich lese ja erst einmal die Daten aus der Tabelle termine_teilnehmer */
FROM termine_teilnehmer

/* ab hier komme ich jetzt definitiv ins strudeln... */
/* jetzt müssen die Informationen des Benutzer, sprich Vor- und Nachname ermittelt werden */
/* außerdem benötige ich die Information, ob der zu- oder abgesagt hat */
/* und ich benötige die Information, für welchen Termin er es entsprechend getan hat */

/* die Ausgabe soll jetzt so gefiltert sein, dass ja nur die jeweiligen Zu- und Absagen für den jeweiligen Termin angezeigt werden, weshalb ich jetzt die eingetragene ID in der Tabelle termine_teilnehmer mit der ID der Tabelle termine vergleiche */
WHERE  termine_teilnehmer.id = termine.id
";

        $ergebnis = mysql_query( $sql, $conid );
        if (@mysql_num_rows( $ergebnis ) > 0)
        {
            while ($zeile = mysql_fetch_array( $ergebnis ))
            {
            /* auch hier weiß ich noch keine Lösung,... ich muss doch eigentlich nur EINE id (welche?), vornamen, nachnamen und teinahme (1 oder 0) ausgeben */
            }
        }

        mysql_free_result( $ergebnis );
        return $datensatz;
    }
}

Ich habe jetzt wirklich eine ganze Menge probiert und mich auch versucht weiter mit den JOIN-Funktionen zu befassen, aber ich bekomme es wirklich nicht hin.
 
Okey. Andere Idee die dir vielleicht helfen könnte (Fehler nicht ausgeschlossen!):
PHP:
function termine_teilnehmer( $conid, $termin_id, bool $teilnahme = 1)
{
    if ($conid)
    {
       /* $sql = "SELECT
                    benutzer.*,
                    termine.*,
                    termine_teilnehmer.*
                FROM
                    termine_teilnehmer
                    JOIN benutzer
                        ON termine_teilnehmer.benutzer_id = benutzer.id
                    JOIN termine
                        ON termine_teilnehmer.termine_id = termine.id";
        */
        $sql = "SELECT USR.id, USR.nachname, USR.vorname 
                FROM benutzer USR JOIN termine TMR JOIN termine_teilnehmer TMR_USR
                ON USR.id = TMR_USR.benutzer_id AND TMR.id = TMR_USR.termine_id
                WHERE TRM_USR.teilnahme = ".$teilnahme." AND TMR.id = ".$termin_id;
        
        $ergebnis = mysql_query( $sql, $conid );
        if (@mysql_num_rows( $ergebnis ) > 0)
        {
            while ($zeile = mysql_fetch_array( $ergebnis ))
            {
                /*
                $datensatz[$zeile['id']]['id']        = $zeile['id'];
                $datensatz[$zeile['id']]['nachname']  = $zeile['nachname'];
                $datensatz[$zeile['id']]['vorname']   = $zeile['vorname'];
                $datensatz[$zeile['id']]['teilnahme'] = $zeile['teilnahme'];
                */

                $datensatz[] = $zeile;
            }
        }

        mysql_free_result( $ergebnis );
        return $datensatz;
    }
}
Mit dieser Funktion kannst du dir alle Zusagen und Absagen zu jedem beliebigen Termin ausgeben lassen.

Aufrufen kannst du diese dann in etwa so:
PHP:
/* 
$termine ist ein array aus deinen ganzen Termin-IDs!
Wie du diese Termine ausliest ist dann deine Sache ;)
*/
foreach($termine as &$termin)
{
    $usr = termine_teilnehmer( $conid, $termin, 1);
    if($usr)
        echo "Teilnahmen:";
    foreach($usr as &u)
    {
        #ausgabe aller Personen, die teilnehmen
    }

    $usr = null;
    $usr = termine_teilnehmer( $conid, $termin, 0);
    if($usr)
        echo "Absagen:";
    foreach($usr as &u)
    {
        #ausgabe aller Personen, die nicht teilnehmen
    }
}

Wie als kommentar schon angemerkt: Die Termine auslesen und die IDs in $termine speichern ist deine Aufgabe!
 
Zuletzt bearbeitet:
Ich habe nun eine Problemstellung lösen können. Es werden nun die Zu- bzw. Absagen entsprechend der Termin-ID-Zuordnungen ausgegeben. Ein Problem besteht jetzt allerdings noch mit der "elseif"-Ausgabe, wenn zu einem Termin noch keine Zu- bzw. Absagen vorhanden sind. Es wird so oft die Meldung ausgegeben, wie auch auch Zu- bzw. Absagen getätigt wurden. Wenn also für einen Termin drei Zusagen sind, erscheint drei Mal die Meldung, dass noch keine Absagen vorhanden sind. Ich gehe davon aus, dass es daran liegt, dass die elseif ja auch mit in der foreach-Schleife drin hängt.

Ich poste auch die aktuellen Quelltexte, das der Lösungsweg weiter erkennbar bleibt.

Aktuelle Ausgabe:

aktuelle_ausgabe.jpg

Aktuelle SQL-Abfrage:

PHP:
// Termine Teilnehmermeldungen
function termine_teilnehmer( $conid )
{
    if ($conid)
    {
        $sql = "SELECT
                    termine_teilnehmer.id,
                    termine_teilnehmer.benutzer_id,
                    termine_teilnehmer.termine_id,
                    termine_teilnehmer.teilnahme,
                    benutzer.nachname,
                    benutzer.vorname
                FROM
                    termine_teilnehmer
                    JOIN benutzer
                        ON termine_teilnehmer.benutzer_id = benutzer.id
                    JOIN termine
                        ON termine_teilnehmer.termine_id = termine.id";
        $ergebnis = mysql_query( $sql, $conid );
        if (@mysql_num_rows( $ergebnis ) > 0)
        {
            while ($zeile = mysql_fetch_array( $ergebnis ))
            {
                $datensatz[$zeile['id']]['id']        = $zeile['id'];
                $datensatz[$zeile['id']]['pid']       = $zeile['termine_id'];
                $datensatz[$zeile['id']]['nachname']  = $zeile['nachname'];
                $datensatz[$zeile['id']]['vorname']   = $zeile['vorname'];
                $datensatz[$zeile['id']]['teilnahme'] = $zeile['teilnahme'];
            }
        }

        mysql_free_result( $ergebnis );
        return $datensatz;
    }
}

Aktuelle php-Ausgabe:

PHP:
<?php

// Termine
if (is_array($termine))
{
  foreach ($termine as $eintrag)
  {
    //TERMINDARSTELLUNG (zur besseren Übersicht rausgenommen)
    if (isset ($_SESSION['user_id']))
    {
    echo ' <h2>Teilnehmer</h2><br /> ';
    echo ' <ul class="ul"> ';
    foreach ($termine_teilnehmer as $teilnahme) // <-- die zuvor inflationär verwendete "as $eintrag" wird nicht mehr angewendet
      {
      if($teilnahme['teilnahme'] == '1' AND $teilnahme['pid'] == $eintrag['id']) // die termine_teilnehmer.termine_id wird mit der termine.id abgeglichen
        {
        echo ' <li class="li-quadrat">' . $teilnahme['vorname'] . ' ' . $teilnahme['nachname'] . '</li> ';
        }
      elseif($teilnahme['teilnahme'] == '0' AND $teilnahme['pid'] == $eintrag['id']) // diese Meldung wird mehr als einmal ausgegeben PROBLEM
        {
        echo ' <li class="li-none">Es gibt noch keine Teilnehmer.</li> ';
        }
      }
      echo ' </ul> '; 
      echo ' <h2>Absagen</h2><br /> ';
      echo ' <ul class="ul"> ';
    foreach ($termine_teilnehmer as $absage) // <-- die zuvor inflationär verwendete "as $eintrag" wird nicht mehr angewendet
      {
      if($absage['teilnahme'] == '0' AND $absage['pid'] == $eintrag['id']) // die termine_teilnehmer.termine_id wird mit der termine.id abgeglichen
        {
        echo ' <li class="li-quadrat">' . $absage['vorname'] . ' ' . $absage['nachname'] . '</li> ';
        }
      elseif($absage['teilnahme'] == '1' AND $absage['pid'] == $eintrag['id']) // diese Meldung wird mehr als einmal ausgegeben PROBLEM
        {
        echo ' <li class="li-none">Es gibt noch keine Absagen.</li> ';
        }
      }
      echo ' </ul> '; 
    }
    echo ' </div><br /> ';
  }
}
else { echo ' <hr/>Keine Termine verfügbar. '; }

?>
 

Neue Beiträge

Zurück