Не мога да различа какво точно се опитвате да постигнете, но звучи сякаш просто искате да получите таблица, която показва всяка глава с нейната тема и ресурс.
Ако е така, тогава следния 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;
ще върне точно това, съгласно http://sqlfiddle.com/#!9/ddf252/ 12
Или игнориране на идентификаторите на присъединяване в избраното:
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
според http://sqlfiddle.com/#!9/ddf252/14
Ако това не е това, което търсите, бихте ли обяснили малко по-подробно какви резултати искате да видите?
Редактиране :За да върнете по-сбит списък с всички свързани записи
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
Съгласно http://sqlfiddle.com/#!9/ddf252/30
Най-накрая , за да ги групирате по глава и тема:
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
Както се вижда тук:http://sqlfiddle.com/#!9/ddf252/85
Проверих резултатите и изглеждат добре - но проверете отново, тъй като в главата ми е изчезнало малко като MySQL Inception (тук е минал 1 сутринта)
Допълнително допълнение:Различни стойности на ресурс
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
Вижте http://sqlfiddle.com/#!9/ddf252/88