Wednesday 15 August 2012

sql - Using GROUP_CONCAT, GROUP, and HAVING in the same statement in MySQL -


किसी अनुप्रयोग में एक तालिकाओं projects , श्रेणियां , और एक तालिका, जो उन में से n: m संबंधों को संभालती है ( project_category_info ):

अब मुझे एक श्रेणी के सभी प्रोजेक्ट्स प्राप्त करना है (मैं इसे HAVING के साथ हल कर रहा हूं) । मैं भी परिणाम सेट है, जो श्रेणियों प्रत्येक परियोजनाओं अंतर्गत आता है में जानकारी की जरूरत है के लिए ( CONCAT_GROUP ग्रुप के साथ संयुक्त):

  का चयन करें `परियोजनाओं `। *,` categories`.`id` के रूप में `id`, group_concat (categories.id SEPARATOR '|||') के रूप में` categories`, group_concat (categories.short_name SEPARATOR '|||') `से category_names` के रूप में `projects` अंदरूनी शामिल हों` `पर project_category_info`.`project_id` =` projects`.`id` वाम project_category_info` `पर project_category_info`.`category_id` =` categories`.`id` ग्रुप categories` शामिल हों `` projects` द्वारा .`आईडी 'होविंग (`श्रेणियां`````` = 3);  

नतीजे 12 पंक्तियों में सेट हो गए हैं लेकिन जब मैं GROUP_CONCAT और GROUP को छोड़ देता हूं, मुझे एक पंक्ति अधिक मिलता है क्यूं कर? इस व्यवहार के कारण क्या हो सकता है?

मुझे विश्वास है कि आपके प्रश्न में आपकी तर्क गलत है। मैं इसे फिर से लिखने की कोशिश कर रहा हूं। सबसे अच्छा तरीका थोड़ा रुकें और इसे वापस एक साथ डालने से पहले समस्या को तोड़ने की है

एक वर्ग की सभी परियोजनाओं पाने के लिए:।

  का चयन करें PROJECT_ID से project_category_info कहां category_id = 3;  

अब, उन प्रोजेक्ट के लिए सभी पंक्तियां प्राप्त करने के लिए category_info तालिका पर वापस जुड़ें:

  SELECT * से project_category_info WHERE project_id IN (परियोजना का चयन करें project_id project_category_info WHERE category_id = 3);  

आप नाम पाने के लिए परियोजनाओं और श्रेणियों में शामिल हो सकते हैं:

  SELECT p.id, p.title, c.title से project_category_info pci JOIN p.id पर परियोजनाओं पी = pci.project_ श्रेणियों में शामिल हों ग पर c.id = pci.catgory_id कहां में pci.project_id (से PROJECT_ID चयन project_category_info कहां category_id = 3);  

अब, आप GROUP_CONAT () को c.title कॉलम में जोड़ सकते हैं, और समूह p.id द्वारा:

  चयन p.id, p.title, group_concat (c.short_name SEPARATOR '|||') project_category_info पीसीआई से category_names के रूप में p.id पर परियोजनाओं पी शामिल हों = pci.project_ श्रेणियों में शामिल हों ग पर c.id = pci.catgory_id कहां पीसीआई .project_id IN (project_category_info से SELECT project_id WHERE श्रेणी_id = 3) ग्रुप पी। पीआईडी;  

No comments:

Post a Comment