Aus 3 Tabellen ein User mit Ränge in (option)-ausgeben
Hallo,
ich verzweifle schon ein wenig...
und zwar möchte ich aus 3 Tabellen merere User mit Ränge in <option> setzen/ausgeben.
folgende SQL:
(handle_user)
-ID -Handle -password -email
-1 -karl -xxxxx -xxxx.xx
-2 -hubert -xxxxxx -xxxx.xx
-3 -fritz -xxxxxx -xxxx.xx
-4 -maria -xxxxxx -xxxx.xx
-5 -isolde -xxxxxx -xxxx.xx
-6 -hubert -xxxxxx -xxxx.xx
(handle_group)
-id -group_name -aka
-1 -uhu -vogel
-2 -katze -tier
-3 -maus -tier
-4 -taube -vogel
(group_members)
-id -scener_handel -scener_name -group_id
-1 -2 -hubert -1
-2 -1 -karl -3
-3 -4 -maria -1
-4 -2 -hubert -2
-5 -2 -hubert -4
-5 -4 -maria -2
so die aufteilung in der SQL.
Und hier der Code: (ist sicher vieles falsch drin).
Dann müsste:
id3 <option>fritz</option)
id2 <option>hubert (uhu/katze/taube)</option)
id6 <option>hubert</option)
id5 <option>isolde</option>
id1 <option>karl (maus)</option)
id4 <option>maria (uhu/taube)</option)
ausgeben, wo er nur bis jetzt
<option>hubert (uhu/katze/taube)</option)
<option>karl (maus)</option)
<option>maria (uhu/taube)</option)
ausgiebt, wenn ich die erste SQL oben mit reinsetze ist es ganz durcheinander.
greets
ich verzweifle schon ein wenig...
und zwar möchte ich aus 3 Tabellen merere User mit Ränge in <option> setzen/ausgeben.
folgende SQL:
(handle_user)
-ID -Handle -password -email
-1 -karl -xxxxx -xxxx.xx
-2 -hubert -xxxxxx -xxxx.xx
-3 -fritz -xxxxxx -xxxx.xx
-4 -maria -xxxxxx -xxxx.xx
-5 -isolde -xxxxxx -xxxx.xx
-6 -hubert -xxxxxx -xxxx.xx
(handle_group)
-id -group_name -aka
-1 -uhu -vogel
-2 -katze -tier
-3 -maus -tier
-4 -taube -vogel
(group_members)
-id -scener_handel -scener_name -group_id
-1 -2 -hubert -1
-2 -1 -karl -3
-3 -4 -maria -1
-4 -2 -hubert -2
-5 -2 -hubert -4
-5 -4 -maria -2
so die aufteilung in der SQL.
Und hier der Code: (ist sicher vieles falsch drin).
<?PHP
//$sql = 'SELECT * FROM handle_user WHERE handle order by handle';
//foreach ($pdo->query($sql) as $row6) {
$zählerb = '0';
$ghf = '0';
//$sql = 'SELECT * FROM group_members WHERE scener_name = "'.$row6['handle'].'" order by scener_name';
$sql = 'SELECT * FROM group_members order by scener_name';
foreach ($pdo->query($sql) as $row3) {
if ($ghf == $row3['scener_handle']){
ECHO "/";
$zählerb ='1';
}ELSE{
ECHO ")</option>";
ECHO "<option value='".$row3['scener_handle']."'>".$row3['scener_name']."";
}
$ghf = $row3['scener_handle'];
$sql = 'SELECT * FROM handle_group WHERE id = "'.$row3['group_id'].'"';
foreach ($pdo->query($sql) as $row1) {
if ($ghf == $row3['scener_handle']){
IF ($zählerb){
}ELSE{
ECHO " (".$row1['group_name'];
}
//}
if ($zählerb){
ECHO $row1['group_name'];
}
}ELSE{
}
}
}
if ($zählerb){
echo ")</option>";
}
?>
Dann müsste:
id3 <option>fritz</option)
id2 <option>hubert (uhu/katze/taube)</option)
id6 <option>hubert</option)
id5 <option>isolde</option>
id1 <option>karl (maus)</option)
id4 <option>maria (uhu/taube)</option)
ausgeben, wo er nur bis jetzt
<option>hubert (uhu/katze/taube)</option)
<option>karl (maus)</option)
<option>maria (uhu/taube)</option)
ausgiebt, wenn ich die erste SQL oben mit reinsetze ist es ganz durcheinander.
greets
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 671579
Url: https://administrator.de/forum/aus-3-tabellen-ein-user-mit-raenge-in-option-ausgeben-671579.html
Ausgedruckt am: 23.02.2025 um 21:02 Uhr
10 Kommentare
Neuester Kommentar
Moin,
Ok, das Ziel habe ich verstanden.
Welches DBMS kommt zum Einsatz? Danach richtet sich die Lösung. Bei MsSQL wäre z.B. was mit
Und du musst mit einem
Und ein Tipp:
Dein Formatierungstil ist … ausbaufähig. Arbeite mal mit Tabs oder besser Leerzeichen. Das macht im Quellcode den Lesefluss leichter.
P.S.
Stelle deine Tabellen hier mal auch als Tabellen dar: Formatierungen in den Beiträgen
Ok, das Ziel habe ich verstanden.
Welches DBMS kommt zum Einsatz? Danach richtet sich die Lösung. Bei MsSQL wäre z.B. was mit
STUFF()
und XML PATH()
machbar.Und du musst mit einem
LEFT JOIN()
arbeiten. Das klappt bei MS SQL ebenso wie bei MySQL etc.Und ein Tipp:
Dein Formatierungstil ist … ausbaufähig. Arbeite mal mit Tabs oder besser Leerzeichen. Das macht im Quellcode den Lesefluss leichter.
P.S.
Stelle deine Tabellen hier mal auch als Tabellen dar: Formatierungen in den Beiträgen
genau so ist der sinn. das alle User ausgegeben werden, auch die nicht in eine gruppe sind.
Wie oben beschrieben, gibt er mir alle User die in eine Gruppe sind aus, nur nicht die, die nicht in eine Gruppe sind, und das ist wo ich nicht weiterkomme und dran verzweifle.
Ist ja auch logisch, da Du an keiner Stelle (ok, doch, 1x auskommentiert 😉) die Tabelle "handle_user" abfragst.Wie oben beschrieben, gibt er mir alle User die in eine Gruppe sind aus, nur nicht die, die nicht in eine Gruppe sind, und das ist wo ich nicht weiterkomme und dran verzweifle.
Der grundsätzliche Ansatz ist:
- lese nacheinander alle Einträge der Tabelle "handle_user" ein
- für jeden Eintrag ermittele, ob er in der Tabelle "group_members" ist (und zwar anhand der ID handle_user:id = group_members:scener_handel)
- falls ja, löse den Gruppennamen über die Tabelle "handle_group" auf (über group_members:group__id = handle_group:id)
LEFT JOIN() bei MySQL
Dann arbeite dich ein.Und können wir davon ausgehen, dass du MySQL als DBMS einsetzt?
Denn wie gesagt, danach richtet sich die Lösung.
Deine Naforderung lässt sich komplett im SQL-Query abbilden.
P.S.
Lies dir nochmal die Holfe zur Formatierung von Tabellen hier durch und korrigiere deine Darstwllung oben.
So hätte ich es erwartet:
handle group
id | group_name | group_id |
---|---|---|
1 | uhu | vogel |
2 | katze | tier |
3 | maus | tier |
4 | taube | vogel |
LEFT JOIN() bei MySQL Bömische dörfer bei mir.
Dem kann man abhelfen: learnsql.de/blog/9-praktische-beispiele-fuer-sql-left-join/Welches DBMS kommt zum Einsatz?
Die Frage sei hiermit wiederholt.Klingt alles irgendwie nach Schulaufgabe. Jedenfalls darfst Du auch Eigeneinsatz zeigen.