Werte anderer Tabelle als Keys der ersten Tabelle

ThiKool

Erfahrenes Mitglied
Hallo zusammen,

ich weiß nicht ob folgendes in mySQL geht und komme einfach nicht drauf:

ich habe folgendes:

SELECT
id,
name
FROM user

Sagen wir ich bekomme 3 user raus:

id | name
--------------------
1 | user1
2 | user2
3 | user3

Jetzt habe ich noch eine Zweite Tabelle die wie folgt aussieht:

id | user_id | description_id | text
--------------------
1 | 1 | 5 | blabla
2 | 1 | 5 | blubblub
3 | 1 | 6 | blabla356
4 | 2 | 7 | blabla686588

Jetzt würde ich gerene beide Abfragen zusammenwürfeln, dass sowas rauskommt:
Geiche description IDs eines Users sollen zusammengezählt werden, die discription Id selbst soll als spalte mit dem prefix "description_" ausgegeben werden

id | name | description_5 | description_6 | description_7
--------------------
1 | user1 | 2 | 1 | NULL
2 | user2 | NULL | NULL | 1
3 | user3 | NULL | NULL | NULL

Ich hoffe es ist verständlich... Danke euch schonmal :)

(Natürlich könnte ich mir auch erst alle user rauslassen, wie ganz oben gezeigt und dann für jeden eine Abfrage wie z.B. so machen:

SELECT
COUNT(description_id)
FROM tabelle_2
WHERE user_id = 1

aber da muss es doch einen besseren Weg geben oder?
)
 
Hi

dynamisch Spalten nebeneinander zu erzeugen ist nicht wirklich der "bessere" Weg.
Würde es nicht reichen, das untereinander auszugeben?
 
Hmm, wenn ich dich richtig verstehe würde es ja dann so aussehen oder:

id | name | description_id | text
--------------------
1 | user1 | NULL| NULL
2 | user2| NULL| NULL
3 | user3| NULL| NULL
1 | NULL | 5 | blabla
2 | NULL | 5 | blubblub
3 | NULL | 6 | blabla356
4 | NULL | 7 | blabla686588

Es geht nur um einen interenen Report, die Performance ist jetzt nicht sooo wichtig.
 
Es ist nicht die Performance. MySQL kennt keine Pivot/Crossview. Du musst jeden Fall von Hand ausprogrammieren
SQL:
select
  u.id,
  u.name
  sum(if(t.description_id = 5, 1, 0)) as description_5,
  sum(if(t.description_id = 6, 1, 0)) as description_6,  
  .. etc.
from 
  user u 
  left join table2 t
  on u.id = t2.user_id
group by
  u.id,
  u.name

Untereinander meint er eher sowas

user_id | user_name |description_id | text
--------------------
1 | user1 | 5 | blabla
1 | user1 | 5 | blubblub
1 | user1 | 6 | blabla356
2 | user2 | 7 | blabla686588
3 | user3 | NULL | NULL
 
Hmm... ok, dass wollte ich wissen, ob es da eine Möglichkeit gibt es automatisch darstellen zu lassen.

Vielen Dank dir!
 
Zurück