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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183877
Url: https://administrator.de/contentid/183877
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
5 Kommentare
Neuester Kommentar
Abend,
Was für eine Datenbank verwendest du? -> Ich gehe jetzt einfach mal von einer MS SQL DB aus.
Das sollte so schnell, schnell funktionieren (habe es nicht getestet) oder dich auf eine richte Spur bringen.
Grüsse
scan
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
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.
Du hast nur Tabellennamen aufgelistet und in Prosa ein paar Zusammenhänge beschrieben.
Aufgrund deiner Erklärung tippe ich mal:
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
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:
- t_user hat eine 1:1 Beziehung zu t_klasse
- t_klasse hat 0:n Beziehung zu t_fragebogen
- 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
Hi,
wenn ich's richtig verstanden habe, willst du die Fragen und Antworten für einen User ausgeben.
Probier' doch mal folgendes:
greetz, pi314
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;