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: 31.03.2025 um 06:03 Uhr
15 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:
- lies 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 Eigeninitiative zeigen.
danke nochmal für die Tips, mit INNER JOIN und Group_concat klappt es jetzt.
Schon mal gut Wie bekomme ich die User in der Auflistung, die nicht in der Gruppe sind oder muss ich dafür eine Blank Group setzen?
Oben anstelle des INNER JOIN() ggf. ein LEFT JOIN() nutzen.Oder die Abfrage (angepasst) wiederholen, und mit einem UNION ALL kombinieren:
SELECT spalte1, spalte2, spalte3 FROM myTable WHERE spalte3 NOT NULL
UNION ALL
SELECT spalte1, spalte2, spalte3 FROM myTable WHERE spalte3 IS NULL
Mehr ist, ohne dein Statement zu kennen, nicht an Hilfe möglich
Dann fehlt ja eigentlich nur noch: Wie kann ich einen Beitrag als gelöst markieren?.
Außerdem wäre es für die Nachwelt nett, wenn Du dann das korrigierte Script hier auch einstellst, oder ggf. das SQL-Statement.
Außerdem wäre es für die Nachwelt nett, wenn Du dann das korrigierte Script hier auch einstellst, oder ggf. das SQL-Statement.