Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

संसाधनों, विषयों और अध्यायों के बारे में सामान्यीकृत डीबी में ग्रुप बाय के साथ जुड़ें

आप जो हासिल करने की कोशिश कर रहे हैं, मैं वास्तव में उसे अलग नहीं कर सकता, लेकिन ऐसा लगता है कि आप बस एक तालिका प्राप्त करना चाह रहे हैं जो हर अध्याय को उसके विषय और संसाधन के साथ दिखाती है।

यदि ऐसा है, तो निम्न 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अमान्य कास्ट अपवाद को हैंडल नहीं किया गया था MySQL

  2. देशांतर और अक्षांश से दूरी के भीतर POI खोजने के लिए WHERE क्लॉज का उपयोग करना

  3. JDBC ReadyedStatement के परिणामस्वरूप MySQL सिंटैक्स त्रुटि होती है

  4. mysql - आज दो कॉलम मानों के बीच है

  5. AUTO_INCREMENT प्राथमिक आईडी वाली MySQL तालिका रोलबैक के बाद संख्या जारी नहीं करती है