MySQL - Neue Tabelle aus einer Abfrage nebeneinander erstellen

LudwigK

Grünschnabel
Hallo Community,

habe mal wieder ein Problem, bei dem ich nicht weiterkomme, und hoffe auf Eure Hilfe!

Aus einer Abfrage erstelle ich mir ein Tabelle wie folgt:

IDName
1a
1b
1c
2a
2d
3f
3h
usw.

Dabei können zu einer ID verschieden viele (n) Namen vorkommen. Gibt es eine Möglichkeit in MySQL das Ergebnis nach folgenden Schema in eine neue Tabelle zu schreiben oder muss ich mir mit PHP helfen.

IDn1n2n3
1abc
2ad
3fh


Viele Dank Euch schon mal!
 
Wenn die Anzahl nX unbekannt ist, dann musst du es mit PHP lösen oder auf eine andere DB umsteigen.
Wennd ie anzahl n bekannt ist, dann kannst du das mit IF() aufbrösmeln. In dienem Fall müsste nich eine Zählervariable dazu.
 
Danke für Deine schnelle Antwort!
An IF() Anweisungen in (My)SQL habe ich mich noch nicht gewagt. Mir ist bekannt, dass es aktuell ca. 15.000 IDs und 450 Namen gibt. Ein Name kann hinter mehreren IDs stehen, jedoch sind es nicht mehr als 15.

Kann man hierzu eine IF() Lösung heranziehen, wenn ja bitte ich um ein kleines Beispiel.
EDIT: Bzw. unterstützt MySQL FOR-Schleifen, das man es evtl. damit lösen kann?
 
Auf die Schnelle und ungetestet:
SQL:
SELECT
	t1.id,
	MAX(t1.n1) AS n1,
	MAX(t2.n1) AS n2,
	...
	MAX(t15.n1) AS n15
FROM
	(
		SELECT
			-- Bei gleicher ID die Spalte um 1 erhöhen, ansonsten auf 1 setzen
			@col_id := IF(@last_id = t.id, @last_id + 1, 1)		AS nid,
			-- DIe ID Zwieschenspeicher. Muss nach der nid-Ziele sein
			@last_id := id,
			-- DIe einzelnen SPalten aufbrösmeln
			IF(@col_id = 1, t.name, NULL)	AS n1,
			IF(@col_id = 2, t.name, NULL)	AS n2,
			...
			IF(@col_id = 15, t.name, NULL)	AS n15
		FROM
			-- Tabelle nach id sortieren
			(SELECT * FROM mytable ORDER BY id) AS t,
			-- Variablen instanzieren
			(SELECT @last_id := 0, @col_id = 1) AS vars
	) AS t1
GROUP BY
	t1.id
 
Zuletzt bearbeitet von einem Moderator:
Zurück