genion18
Goto Top

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).

<?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

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

DivideByZero
DivideByZero 23.02.2025 aktualisiert um 18:46:01 Uhr
Goto Top
Hmm, wie meinen? Schon sprachlich bin ich da ein wenig verwirrt, aber auch die technischen Begriffe lassen mich etwas ratlos zurück...
genion18
genion18 23.02.2025 aktualisiert um 18:57:39 Uhr
Goto Top
hy,

ich hab 3 sql tabellen:

(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

wo er mir z.b. bei echo

-id -Handle
-3 -fritz
-2 -hubert (uhu/katze/taube)
-6 -hubert
-5 -isolde
-1 -karl (maus)
-4 -maria (uhu/taube)

ausgeben soll.

greets
DivideByZero
DivideByZero 23.02.2025 um 19:16:55 Uhr
Goto Top
Das macht weiterhin keinen Sinn. Wonach soll das denn wie sortiert werden? Das macht doch vorne und hinten keinen Sinn. Isolde ist in keiner Gruppe, wird aber ausgegeben?
genion18
genion18 23.02.2025 aktualisiert um 19:36:00 Uhr
Goto Top
hy,

genau so ist der sinn. das alle User ausgegeben werden, auch die nicht in eine gruppe sind.

nur die in eine oder mehrere gruppen sind sollen dann zusammengeführt werden, das die gruppen dann mit
/ getrennt sind. so wie oben beschrieben.

hubert ist auch 2 mal, einmal in 3 gruppen und einmal ohne gruppe, und soll auch so in der userliste angegeben werden.

einmal hubert (uhu/katze/taube) mit der id 2
und einmal hubert mit der id 6

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.

greets
em-pie
em-pie 23.02.2025 um 19:46:22 Uhr
Goto Top
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 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
DivideByZero
DivideByZero 23.02.2025 um 20:25:37 Uhr
Goto Top
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.
DivideByZero
DivideByZero 23.02.2025 um 20:31:27 Uhr
Goto Top
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)
Das dann entweder direkt in SQL als SQL-Abfrage (perfekt) oder von Hand nachgelagert in PHP.
genion18
genion18 23.02.2025 aktualisiert um 20:56:37 Uhr
Goto Top
hy,

die sql tabellen.

handle_user
id | scener_handel | password | email
1 | karl | xxxx | xxx.de
2 | hubert xxxx | xxx.de
3 | fritz | xxxx | xxx.de
4 | maria | xxxx | xxx.de
5 | isolde | xxxx | xxx.de
6 | hubert | xxxx | xxx.de

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
6 | 4 | maria | 2

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.

Greets
em-pie
em-pie 23.02.2025 um 21:13:08 Uhr
Goto Top
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
DivideByZero
DivideByZero 23.02.2025 um 21:14:27 Uhr
Goto Top
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.