5

मेरे पास प्रत्येक-दूसरे के अंदर लूप के लिए 2 है। लूप 1 में प्रत्येक पंक्ति 'ए', 'बी', 'सी' के लिए, मुझे लूप 2 में समूह 'एक्स' के सभी माता-पिता को खोजने के लिए पदानुक्रमित पेड़ तक पहुंचने की आवश्यकता है। यह मुझे सीटीई का उपयोग करता है जहां मुझे प्रत्येक पंक्ति के लिए अलग-अलग पथ खोजने की आवश्यकता होती है। एक लूप में सीटीई का उपयोग करना यह सुनिश्चित करने का समाधान नहीं है कि मैं प्रत्येक समूह आईडी के लिए कहां से मिलान कर सकता हूं। इस लिंक भेजा, लेकिन कुप्पी ढांचे का उपयोग कर क्रॉन जॉब के लिए बहुत Looping hierarchy CTEपाइथन ट्रैवर्स सीटीई?

कोड स्निपेट बाहर नहीं कर सके:

s = select([rt_issues]).\ 
    where(
     and_(
      rt_issues.c.status !='Closed', 
      rt_issues.c.assigned_to != None 
     )) 
rs = conn.execute(s) 
if rs.rowcount > 0: 
    s4 = text('with recursive rec_grp as(select id, parent_id, name, head, 1 as level, array[id] as path_info from groups union all select grp1.id, grp1.parent_id, grp1.name, grp1.head, rc.level + 1, rc.path_info||grp1.id from groups grp1 join rec_grp rc on grp1.id = rc.parent_id) select distinct id, parent_id, name, head, path_info from rec_grp order by id') 

    rs4 = conn.execute(s4) 

    for r in rs: 
     head_list = [] 
     hierarchical_grps = [] 
     for rr in rs4: 
      if ((rr['path_info'][0] == r[rt_issues.c.assignee_group])): 
       for g in rr['path_info']: 
        hierarchical_grps.append(g) 
     hierarchical_grps = list(set(hierarchical_grps))    
     send_pending_mail(hierarchical_grps, r['id']) 
     print hierarchical_grps, 'hierarchical_grps' 

    exit(0) 

मैं मेल करने के लिए पदानुक्रम में assignee_group के लिए सभी समूह सिर भेजने की जरूरत है मुद्दा। यह कैसे हासिल किया जा सकता है। लूप का सही तरीके से उपयोग कैसे करें? मैं फ्लास्क के साथ केवल sqlalchemy कोर, postgresql, पायथन का उपयोग कर रहा हूँ। मुझे इसके लिए सटीक कोड चाहिए।

क्या काम करता है नीचे टुकड़ा है:

rs4 = con.execute(s4) 
for rr in rs4: 
    if rr['head']: 
     head_list.append(rr['id']) 

print 'group heads:', head_list 

इस से क्वेरी संभालने जाता है:

mgroup = None 
s = select([rt_issues]).\ 
    where(
     and_(
      rt_issues.c.status !='Closed', 
      rt_issues.c.assigned_to != None 
     )) 
rs = conn.execute(s) 
if rs.rowcount > 0: 
    for r in rs: 
     head_list = [] 
     hierarchical_grps = [] 
     mgroup = r[rt_issues.c.assignee_group] 
     s4 = text('with recursive rec_grp as(select id, parent_id, name, head, 1 as level, array[id] as path_info from groups where id=' +str(mgroup) + 'union all select grp1.id, grp1.parent_id, grp1.name, grp1.head, rc.level + 1, rc.path_info||grp1.id from groupsgrp1 join rec_grp rc on grp1.id = rc.parent_id) select distinct id,parent_id, name, head, path_info from rec_grp order by id') 

    rs4 = conn.execute(s4) 
    for rr in rs4: 
     if ((rr['path_info'][0] == r[rt_issues.c.assignee_group])): 
      for g in rr['path_info']: 
       hierarchical_grps.append(g) 
    hierarchical_grps = list(set(hierarchical_grps)) 
    print hierarchical_grps, 'hierarchical_grps' 
    send_pending_mail(hierarchical_grps, r['id']) 
exit(0) 
+0

क्या आप टेबल संरचना दिखा सकते हैं? यहां, या http://sqlfiddle.com/#!15 –

उत्तर

1

यह मानते हुए कि head स्तंभ बूलियन है, इस head ध्वज सेट के साथ समूह एकत्रित करेगा आपका दूसरा उदाहरण उपयोग किया जाता है (खंड से सुधार में ध्यान दें, "groupgrp1 से" समूह ग्रुप 1 से "होना चाहिए):

WITH RECURSIVE rec_grp AS (
    SELECT 
    id, 
    parent_id, 
    name, 
    head, 
    1   AS level, 
    ARRAY [id] AS path_info 
    FROM groups 
    WHERE id = 4 
    UNION ALL 
    SELECT 
    grp1.id, 
    grp1.parent_id, 
    grp1.name, 
    grp1.head, 
    rc.level + 1, 
    rc.path_info || grp1.id 
    FROM groups grp1 
    JOIN rec_grp rc ON grp1.id = rc.parent_id 
) 
SELECT DISTINCT 
    id, 
    parent_id, 
    name, 
    head, 
    path_info 
FROM rec_grp 
ORDER BY id; 
+0

में आपने केवल एक विशिष्ट आईडी का उपयोग किया है। मैं चाहता हूं कि आईड्स की सूची के लिए। – user956424

+0

यह समस्या समूह के सभी अभिभावक समूहों को सूचीबद्ध करता है जिनमें 'हेड' ध्वज सेट है। क्या आपको कई मुद्दों, या एक समस्या के लिए सूचियों की आवश्यकता है? कई मुद्दों के लिए – teppic

+0

। क्या प्रत्येक मेलिंग मुद्दे के लिए हर समय सीटीई निष्पादित करना आवश्यक है? क्या इससे बचा जा सकता है। जैसा कि मैंने कहा है, निष्पादित होने पर मैं प्रदर्शन पर प्रभाव जानना चाहता हूं। क्या कोई बेहतर विकल्प है जो मैं – user956424

संबंधित मुद्दे