hakkbart
Goto Top

JOIN über 5 Tabellen

Es sollen 5 Tabellen mit einem JOIN verknüpft werden.

Abend ...

Ich stehe vor einem mir unlösbarem Problem mit einer Datenbankabfrage.

In einem Feedbackportal können User Fragebögen beantworten. Diese setzen sich aus verschiedenen Fragen-Antwort-Kombinationen, aus einer Tabelle "Fragenpool" und "Antwortenpool", zusammen.
Jeder Nutzer ist dabei einer Klasse zugeordnet, welcher wiederum verschiedene Fragebögen zugeordnet werden können.

Folgende Tabellen sind vorhanden:

t_user
t_klasse
t_fragebogen
t_fragenkatalog
t_antwortkatalog
t_frage_antwort
t_antwort_user

Mir ist nicht ganz klar wie ich hier ansetzen muss.
Die für den User angelegten bzw. freigeschalteten Fragebögen bekomm ich abgefragt, wie ich dann allerdings weiter vorgehe ...

Hat evtl- jemand nen Tipp wie ich das sinnvoll angehe?

MFG

Content-Key: 183877

Url: https://administrator.de/contentid/183877

Printed on: April 24, 2024 at 18:04 o'clock

Member: scan5415
scan5415 Apr 20, 2012 at 20:33:35 (UTC)
Goto Top
Abend,

Was für eine Datenbank verwendest du? -> Ich gehe jetzt einfach mal von einer MS SQL DB aus.

In einem Feedbackportal können User Fragebögen beantworten. Diese setzen sich aus verschiedenen Fragen-Antwort-Kombinationen, aus einer Tabelle "Fragenpool" und "Antwortenpool", zusammen.
Leider verstehe ich den ersten Satz nicht. Wie setzt sich das genau zusammen?

Jeder Nutzer ist dabei einer Klasse zugeordnet, welcher wiederum verschiedene Fragebögen zugeordnet werden können.
SELECT * 
FROM t_user T0
INNER JOIN t_klasse T1 ON T0.klasseID = T1.klasseID
INNER JOIN t_fragebogen T2 ON T1.klasseID = T2.klasseID

Das sollte so schnell, schnell funktionieren (habe es nicht getestet) oder dich auf eine richte Spur bringen.

Grüsse

scan
Member: pi314
pi314 Apr 23, 2012 at 18:52:10 (UTC)
Goto Top
Abend..

zwar wird es hier nicht essentiell sein, dennoch wäre es interessant, welche DB du verwendest, da geb' ich scan5415 recht.
Zum anderen sind die Informationen etwas spärlich.

  • Wie sind denn die Tabellen aufgebaut?
  • Welche Spalten / FKs gibt's?
  • Oder sind das Tabellen von irgendeinen Framework?

Du hast nur Tabellennamen aufgelistet und in Prosa ein paar Zusammenhänge beschrieben.
Aufgrund deiner Erklärung tippe ich mal:

  1. t_user hat eine 1:1 Beziehung zu t_klasse
  2. t_klasse hat 0:n Beziehung zu t_fragebogen
  3. t_frage_antwort ist die Verknüpfungstabelle für die n:m Beziehung zwischen t_fragenkatalog und t_antwortkatalog

Wie man die nun genau verknüpft, könnte man mit Hilfe eines Datenmodells sagen. Zumindest der Tabellenaufbau würde schon mal weiterhelfen.


so long,
pi314
Member: hakkbart
hakkbart Apr 24, 2012 at 18:38:40 (UTC)
Goto Top
ich hoffe das bringt ein wenig licht ins dunkel ...

http://www.pic-upload.de/view-13915280/db.jpg.html
Member: pi314
pi314 Apr 25, 2012 at 09:41:03 (UTC)
Goto Top
Hi,

wenn ich's richtig verstanden habe, willst du die Fragen und Antworten für einen User ausgeben.
Probier' doch mal folgendes:
select u.vorname, u.name
     , f.frname
     , fr_teil1.frage1, fr_teil1.antwort1
     , fr_teil2.frage2, fr_teil2.antwort2
     , fr_teil3.frage3, fr_teil3.antwort3
     , fr_teil4.frage4, fr_teil4.antwort4
     , fr_teil5.frage5, fr_teil5.antwort5
     , fr_teil6.frage6, fr_teil6.antwort6
     , fr_teil7.frage7, fr_teil7.antwort7
     , fr_teil8.frage8, fr_teil8.antwort8
  from t_user u
       join t_antwortuser au on (au.user_id = u.id)
       join t_fragebogen f on (f.id = au.fragebogen_id)
       join (select fk1.frage as frage1, ak1.antwort as antwort1, fa1.id as fa1ID
               from t_fragekatalog fk1
                    join t_frage_antwort fa1 on (fa1.fragekatalog_id = fk1.id)
                    join t_anwortkatalog ak1 on (ak1.id = fa1.antwort_id)) fr_teil1 on (fr_teil1.fa1ID = f.teil1)
       join (select fk2.frage as frage2, ak2.antwort as antwort2, fa2.id as fa2ID
               from t_fragekatalog fk2
                    join t_frage_antwort fa2 on (fa2.fragekatalog_id = fk2.id)
                    join t_anwortkatalog ak2 on (ak2.id = fa2.antwort_id)) fr_teil2 on (fr_teil2.fa1ID = f.teil2)
       join (select fk3.frage as frage3, ak3.antwort as antwort3, fa3.id as fa3ID
               from t_fragekatalog fk3
                    join t_frage_antwort fa3 on (fa3.fragekatalog_id = fk3.id)
                    join t_anwortkatalog ak3 on (ak3.id = fa3.antwort_id)) fr_teil3 on (fr_teil3.fa1ID = f.teil3)
       join (select fk4.frage as frage4, ak4.antwort as antwort4, fa4.id as fa4ID
               from t_fragekatalog fk4
                    join t_frage_antwort fa4 on (fa4.fragekatalog_id = fk4.id)
                    join t_anwortkatalog ak4 on (ak4.id = fa4.antwort_id)) fr_teil4 on (fr_teil4.fa1ID = f.teil4)
       join (select fk5.frage as frage5, ak5.antwort as antwort5, fa5.id as fa5ID
               from t_fragekatalog fk5
                    join t_frage_antwort fa5 on (fa5.fragekatalog_id = fk5.id)
                    join t_anwortkatalog ak5 on (ak5.id = fa5.antwort_id)) fr_teil5 on (fr_teil5.fa1ID = f.teil5)
       join (select fk6.frage as frage6, ak6.antwort as antwort6, fa6.id as fa6ID
               from t_fragekatalog fk6
                    join t_frage_antwort fa6 on (fa6.fragekatalog_id = fk6.id)
                    join t_anwortkatalog ak6 on (ak6.id = fa6.antwort_id)) fr_teil6 on (fr_teil6.fa1ID = f.teil6)
       join (select fk7.frage as frage7, ak7.antwort as antwort7, fa7.id as fa7ID
               from t_fragekatalog fk7
                    join t_frage_antwort fa7 on (fa7.fragekatalog_id = fk7.id)
                    join t_anwortkatalog ak7 on (ak7.id = fa7.antwort_id)) fr_teil7 on (fr_teil7.fa1ID = f.teil7)
       join (select fk8.frage as frage8, ak8.antwort as antwort8, fa8.id as fa8ID
               from t_fragekatalog fk8
                    join t_frage_antwort fa8 on (fa8.fragekatalog_id = fk8.id)
                    join t_anwortkatalog ak8 on (ak8.id = fa8.antwort_id)) fr_teil8 on (fr_teil8.fa1ID = f.teil8)
 order by u.id, f.id;
greetz, pi314
Member: hakkbart
hakkbart Apr 26, 2012 at 15:43:41 (UTC)
Goto Top
vielen dank ...das is ja mal der knaller ...

MFG