Zum Inhalt springen

Komplizierte Abfrage von n-m-Beziehung in HTML-Drop-Down-Menü bringen


Empfohlene Beiträge

Hallo Leute,

ich arbeite momentan an einer Webdatenbank zur Mitgliederverwaltung eines Vereins.

Dank zahlreicher Google-Suchen bin ich auch schon ziemlich weit. Nur jetzt stoße ich an meine Grenzen.

In einem Formular können Mitglieder bearbeitet oder neu angelegt werden. Dafür gibt es mehrere "Drop-Down-Menüs", welche Inhalte aus anderen Tabellen angezeigt werden. Hier ein Code-Beispiel für die Wohnort-Auswahl:


<td>
PLZ/Ort
</td>
<td>
<select name="cmbOrt">
<?php
echo "<option value='' disabled='disabled' selected='selected'> Bitte Ort wählen... </option>";
$sql = "SELECT O_ID, O_PLZ, O_Name FROM tblOrt ORDER BY O_PLZ";
$result = mysql_query($sql) OR die(mysql_error());
while($row = mysql_fetch_assoc($result))
{
echo "<option value=" . $row['O_ID'] . ($strM_O_ID == $row['O_ID'] ? " selected='selected'" : "").">" . $row['O_PLZ'] ." ". $row['O_Name'] . "</option>";
}
?>
</select>
</td>
[/PHP]

Das funktioniert bei einer 1:n-Beziehung auch perfekt. Der value "O_ID" wird dann als Fremdschlüssel beim Mitglied hinterlegt und beim Aufruf eines bestehenden Mitglieds auch der eigene Ort ausgewählt.

Aber was mache ich jetzt mit meineer n:m-Beziehung? Es handelt sich hier um verschiedene Kategorien (Aktive Mitglieder, Fördermitglieder, Unternehmer, Juristen). Jedes Mitglied kann beliebig viele Kategorien besitzen. Die nötige Zwischentabelle habe ich schon, nur weiß ich nicht, wie ich die Abfrage in das Menü bekomme. Mehrere Felder kann ich mit multiple auswählen, soweit bin ich schon.

Hier noch mein SELECT-Code:

[code] SELECT tblGesamt.M_ID, tblKat.K_ID, tblKat.K_Name, tblMKAT.MKAT_ID, tblMKAT.MKAT_M_ID, tblMKAT.MKAT_K_ID FROM tblGesamt, tblKat, tblMKAT WHERE tblGesamt.M_ID = tblMKAT.MKAT_M_ID AND tblKat.K_ID = tblMKAT.MKAT_K_ID [/code]

tblGesamt enthält die Mitglieder, tblKat die Kategorien, tblMKAT ist die Zwischentabelle.

Ich hoffe der Code ist einigermaßen übersichtlich und jemand hat schon die Lösung dafür.

Mfg

Mike

PS: Brauche ich nach SELECT alle betroffenen Attribute oder nur den Wert, der auch ausgegeben werden soll?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mein Ergebnis bis jetzt:

Funktioniert aber noch nicht, nur der Denkansatz stimmt glaub ich soweit. Ich frage alle Kategorien ab, die das Mitglied besitzt ($strM_ID enthält die ID des aktuell ausgewählten Mitglieds) und füge alle K_IDs in ein Array ein. Während das Drop-Down-Menü aufgebaut wird, wird bei jeder Kategorie geprüft, ob sie "in_array" ist. Wenn ja, wird sie ausgewählt.


<td>
<?php
$strSQL="SELECT
tblGesamt.M_ID,
tblKat.K_ID, tblKat.K_Name,
tblMKAT.MKAT_ID, tblMKAT.MKAT_M_ID, tblMKAT.MKAT_K_ID
FROM
tblGesamt, tblKat, tblMKAT
WHERE
tblGesamt.M_ID = tblMKAT.MKAT_M_ID
AND
tblMKAT.MKAT_M_ID = '".$strM_ID."'
AND
tblKat.K_ID = tblMKAT.MKAT_K_ID";
$recordset = mysql_query($strSQL);
$intAnzahlDS = mysql_num_rows($recordset);
$strMKAT_K_ID ="";
while ($datensatz=mysql_fetch_array($recordset))
{
$strMKAT_K_ID .= $datensatz['MKAT_K_ID'];
}
?>
<select name="cmbKat" multiple="multiple">
<?php
echo "<option value='' disabled='disabled' selected='selected'> Bitte Kategorien wählen... </option>";
$sql = "SELECT K_ID, K_Name FROM tblKat";
$result = mysql_query($sql) OR die(mysql_error());
while($row = mysql_fetch_assoc($result))
{
echo "<option value=" . $row['K_ID'] . (in_array($row['K_ID'],$strMKAT_K_ID) ? " selected='selected'" : "").">" . $row['K_Name'] . "</option>";
}
?>
</select>
</td>
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...