GELÖST: Mehrere Zeilen als mehreren Spalten ausgeben?

M3Y3R

Well-known member
ID: 336361
L
8 Mai 2006
1.608
60
Hallo,

ich habe mal wieder ein Problem.

Derzeit speicher ich Daten von Stellenangeboten in mehreren Tabellen die wie folgt aufgebaut ist:

Jobs
ID | Titel
1​
| Mechatroniker
2​
| Anwendungsentwickler

Branchen
ID | Beschreibung
1​
| KFZ 1
2​
| KFZ 2
3​
| EDV / IT

Jobs2Branche
ID | JOB_ID | BRANCHEN_ID
1​
|
1​
|
1
2​
|
1​
|
2
3​
|
2​
|
3​

Wenn ich die Daten per SQL auslese und über die Tabellen Joine, dann bekomme ich mehrere Zeilen eines Jobs:

Ergebnis
ID | JOB_ID | Titel | BRANCHEN
1​
|
1​
| Mechatroniker | KFZ 1
2​
|
1​
| Mechatroniker | KFZ 2
3​
|
2​
| Anwendungsentwickler | EDV / IT

Mit diesem Ergebnis könnte ich zwar per PHP weiterarbeiten, aber ich möchte so wenig Datenmanipulation machen wie möglich. Deshalb hier nun meine Frage.

Gibt es eine Möglichkeit die Darstellung oben anders zu machen. Also das für Jede Branche des Jobs eine weitere Spalte angefügt wird:

Gewünschtes Ergebnis
ID | JOB_ID | Titel | BRANCHEN 1 | BRANCHEN 2
1​
|
1​
| Mechatroniker | KFZ 1 | KFZ 2
3​
|
2​
| Anwendungsentwickler | EDV / IT

Kann man diese Darstellung per SQL erzeugen oder muss ich Zwangsläufig über PHP die Daten manipulieren? Die Ausgabe kann/könnte auch Komma- oder Pipesepariert in einer einzelnen Tabelle stehen....

Dies würde die Weiterverarbeitung erheblich vereinfachen.


Vielen Dank für eure Hilfe!
Papenburger
 
Zuletzt bearbeitet:
Hmm eine fertige Lösung habe ich nicht, dafür aber zwei Ideen:

1. Wenn die Anzahl der möglichen Branchen stark beschränkt ist, kannst du z.B. 3 Subselects machen, die jeweils mit einem Limit-Offset arbeiten

2. Ein Subselect könnte auch alle Branchenergebnisse anzahlunabhängig kommasepariert in eine einzige Spalte packen, die dann relativ problemlos per explode() weiterverarbeitet werden kann.

Vermutlich gibt es auch noch andere Möglichkeiten, ich würde jedenfalls mal mit der zweiten anfangen.
 
1. Wenn die Anzahl der möglichen Branchen stark beschränkt ist, kannst du z.B. 3 Subselects machen, die jeweils mit einem Limit-Offset arbeiten
Dadurch dass ich nie weiß, wieviele Branchen angegeben werden, würde diese Lösung schon außer Betracht kommen.

2. Ein Subselect könnte auch alle Branchenergebnisse anzahlunabhängig kommasepariert in eine einzige Spalte packen, die dann relativ problemlos per explode() weiterverarbeitet werden kann.
Das Subselect würde dann innerhalb der zu selectieren Spalten gemacht werden oder wo muss dies dann hin? Dies wäre zwar nicht das optimalste, aber immerhin schon besser als mehrfacheinträge abzufangen.

Vermutlich gibt es auch noch andere Möglichkeiten, ich würde jedenfalls mal mit der zweiten anfangen.
Mir würde aber auch nichts anderes mehr einfallen...

Vielleicht kann mir hier jemand ein Beispiel geben, wie ich das machen muss...
 
Zuletzt bearbeitet:
Die Frage ist doch, was willst du hinterher mit diesen Branchen-Infos anfangen? Sollen sie nur in einer Tabelle angezeigt, oder irgendwie weiterverarbeitet werden? Für eine Weiterverarbeitung (sortieren, filtern,...) ist das Konstrukt mit mehreren Branchen pro Zeile grundsätzlich nicht wirklich gut geeignet, wenn es allerdings nur um eine Anzeige geht, ist - wie theilax schreibt - GROUP_CONCAT der richtige Weg. Solltest du - wie von joschilein vorgeschlagen - die Infos später wieder vereinzeln wollen (z.B. mit Explode()), müsstest du natürlich sicherstellen, dass das Trennzeichen, das bei GROUP_CONCAT verwendet wird, nicht auch in den Branchennamen selbst auftaucht, sonst fällt dein explode() auf die Nase.