Ich kann nicht wirklich erkennen, was Sie erreichen wollen, aber es hört sich so an, als wollten Sie einfach eine Tabelle erhalten, die jedes Kapitel mit seinem Thema und seiner Ressource zeigt.
Wenn ja, dann folgendes SQL:
select * from resources r
JOIN topics_to_resource ttr ON ttr.tr_resid = r.res_id
JOIN topics t on t.t_id = ttr.tr_tid
JOIN topics_to_chapter ttc on ttc.tch_tid = t.t_id
JOIN chapters ch ON ch.ch_id = tch_chid
ORDER BY r.res_id;
wird genau das zurückgeben, gemäß http://sqlfiddle.com/#!9/ddf252/ 12
Oder ignorieren Sie die Join-IDs in der Auswahl:
select r.res_id, r.res_name, t.t_id, t.t_name, ch.ch_id, ch.ch_name from resources r
JOIN topics_to_resource ttr ON ttr.tr_resid = r.res_id
JOIN topics t on t.t_id = ttr.tr_tid
JOIN topics_to_chapter ttc on ttc.tch_tid = t.t_id
JOIN chapters ch ON ch.ch_id = tch_chid
ORDER BY r.res_id, t.t_id, ch.ch_id
gemäß http://sqlfiddle.com/#!9/ddf252/14
Wenn das nicht das ist, wonach Sie suchen, könnten Sie ein wenig erläutern, welche Ergebnisse Sie sehen möchten?
Bearbeiten :Um eine übersichtlichere Liste mit allen zugehörigen Datensätzen zurückzugeben
select
CONCAT(r.res_id,': ',r.res_name) 'Resources',
GROUP_CONCAT(CONCAT(' (',t.t_id,': ',t.t_name,')')) 'Topics',
GROUP_CONCAT(CONCAT(' (',ch.ch_id,': ',ch.ch_name,')')) 'Chapters'
from resources r
JOIN topics_to_resource ttr ON ttr.tr_resid = r.res_id
JOIN topics t on t.t_id = ttr.tr_tid
JOIN topics_to_chapter ttc on ttc.tch_tid = t.t_id
JOIN chapters ch ON ch.ch_id = tch_chid
GROUP BY r.res_id
ORDER BY r.res_id, t.t_id, ch.ch_id
Gemäß http://sqlfiddle.com/#!9/ddf252/30
Endlich , um diese nach Kapitel und Thema zu gruppieren:
select
CONCAT(res_id,': ',res_name) 'Resources',
GROUP_CONCAT(`chapters` order by chapters separator '\n') as 'Content'
FROM
(SELECT r.res_id 'res_id',
r.res_name 'res_name',
t.t_id 't_id',
t.t_name 't_name',
CONCAT(t.t_name,': (',GROUP_CONCAT(ch.ch_name ORDER BY t.t_name separator ','),')') 'Chapters'
FROM resources r
JOIN topics_to_resource ttr ON ttr.tr_resid = r.res_id
JOIN topics t on t.t_id = ttr.tr_tid
JOIN topics_to_chapter ttc on ttc.tch_tid = t.t_id
JOIN chapters ch ON ch.ch_id = tch_chid
GROUP BY res_id, t_id
ORDER BY r.res_id, t.t_id, ch.ch_id) as t
GROUP BY res_id
Wie hier zu sehen:http://sqlfiddle.com/#!9/ddf252/85
Ich habe die Ergebnisse überprüft und sie sehen gut aus - aber überprüfen Sie es noch einmal, da es in meinem Kopf ein bisschen wie MySQL Inception gelaufen ist (hier ist es nach 1 Uhr morgens)
Weitere Ergänzung:Eindeutige Werte pro Ressource
select CONCAT(r.res_id,': ',r.res_name) 'Resources', GROUP_CONCAT(distinct t_name separator ',') 'Topics',
GROUP_CONCAT(distinct ch.ch_name separator ',') 'Chapters'
from resources r
JOIN topics_to_resource ttr ON ttr.tr_resid = r.res_id
JOIN topics t on t.t_id = ttr.tr_tid
JOIN topics_to_chapter ttc on ttc.tch_tid = t.t_id
JOIN chapters ch ON ch.ch_id = tch_chid
GROUP BY r.res_id
ORDER BY r.res_id, t.t_id, ch.ch_id
Siehe http://sqlfiddle.com/#!9/ddf252/88