आप जो हासिल करने की कोशिश कर रहे हैं, मैं वास्तव में उसे अलग नहीं कर सकता, लेकिन ऐसा लगता है कि आप बस एक तालिका प्राप्त करना चाह रहे हैं जो हर अध्याय को उसके विषय और संसाधन के साथ दिखाती है।
यदि ऐसा है, तो निम्न SQL:
tt_id =ttr.tr_tidJOIN विषयों_to_chapter ttc पर ttc.tch_tid =t.BY_idJOIN अध्याय ch पर ttr.tr_resid =r.res_idJOIN विषय t पर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 इंसेप्शन की तरह थोड़ा सा चला गया है (यह यहां 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