दो व्याख्याएं संभव हैं। हाल ही की एक टिप्पणी से मैं समझता हूं कि आपको पहले वाले की आवश्यकता है:
बहिष्कृत माता-पिता के बच्चों को बाहर करें
तो अगर बच्चे संपादक नहीं हैं, अगर उनके पूर्वजों में से एक संपादक है तो उन्हें बाहर रखा जाना चाहिए। इसका मतलब है कि आपको सबसे आंतरिक क्वेरी में रिकॉर्ड्स को बाहर करना चाहिए:where
जोड़ें वहाँ:
select id,
name,
parent_id,
user_type
from (select * from p
where user_type <> 'editor'
order by parent_id, id) products_sorted,
(select @pv := '19') initialisation
where find_in_set(parent_id, @pv)
and length(@pv := concat(@pv, ',', id))
बहिष्कृत माता-पिता के बच्चों को शामिल करें
इस व्याख्या में आप चाहते हैं कि संपादक बच्चों को शामिल किया जाए, भले ही उनके किसी पूर्वज को बाहर रखा जाए या नहीं।
user_type
जोड़ें select
. में फ़ील्ड सूची बनाएं और फिर उस क्वेरी को रैप करें जो फ़िल्टर करता है, इस तरह:
select *
from (
select id,
name,
parent_id,
user_type
from (select * from p
order by parent_id, id) products_sorted,
(select @pv := '19') initialisation
where find_in_set(parent_id, @pv)
and length(@pv := concat(@pv, ',', id))
) as sub
where user_type <> 'editor'
तो फिर, यहां परिणाम में ऐसे रिकॉर्ड भी शामिल होंगे जिनके माता-पिता-पदानुक्रम (माता-पिता, दादा-दादी, दादा-दादी, ...) को पूरी तरह से शामिल नहीं किया जा सकता है (क्योंकि उनमें से कुछ संपादक हो सकते हैं)।