Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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?

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]

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.