Saya tidak dapat benar-benar membedakan apa yang ingin Anda capai, tetapi sepertinya Anda hanya mencari tabel yang menunjukkan setiap bab dengan topik dan sumbernya.
Jika sudah, maka berikut SQLnya:
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;
akan mengembalikan hanya itu, sesuai http://sqlfiddle.com/#!9/ddf252/ 12
Atau, abaikan ID gabungan di pilih:
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
sesuai http://sqlfiddle.com/#!9/ddf252/14
Jika bukan itu yang Anda cari, dapatkah Anda menjelaskan sedikit tentang hasil yang ingin Anda lihat?
Sunting :Untuk mengembalikan daftar yang lebih ringkas dengan semua catatan terkait
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
Sesuai http://sqlfiddle.com/#!9/ddf252/30
Akhirnya , untuk mengelompokkan ini menurut bab dan topik:
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
Seperti yang terlihat di sini:http://sqlfiddle.com/#!9/ddf252/85
Saya telah memeriksa hasilnya, dan mereka terlihat baik-baik saja - tetapi periksa kembali, karena hasilnya agak mirip dengan MySQL Inception di kepala saya (sudah lewat jam 1 pagi di sini)
Tambahan lebih lanjut:Nilai berbeda per sumber daya
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
Lihat http://sqlfiddle.com/#!9/ddf252/88