छवि आप थ्रेडेड चर्चा बोर्ड के लिए डीबी स्कीमा बना रहे हैं। क्या किसी दिए गए थ्रेड के लिए उचित क्रमबद्ध सूची का चयन करने का कोई प्रभावी तरीका है? जिस कोड को मैंने लिखा है वह काम करता है लेकिन जिस तरह से मैं इसे भी पसंद करूंगा।रिकर्सिव एसक्यूएल सीटीई और कस्टम सॉर्ट ऑर्डरिंग
मान लीजिए कि आपके पास यह डेटा करते हैं: आदर्श रूप में
1 |- 2 | |- 3 | | |- 5 |- 4
, कोड में, हम परिणाम में प्रदर्शित करने के लिए सेट हैं:
ID | ParentID ----------------- 1 | null 2 | 1 3 | 2 4 | 1 5 | 3
तो संरचना ऐसी लग माना जाता है निम्न क्रम: 1, 2, 3, 5, 4
समस्या: CTE मैं इसे लिखा था के साथ वास्तव में के रूप में वापस किया जा रहा है: 1, 2, 4, 3, 5
मुझे पता है कि LINQ का उपयोग करके समूह/ऑर्डर करना आसान होगा लेकिन मैं इसे स्मृति में करने में अनिच्छुक हूं। यह इस बात यद्यपि में सबसे अच्छा समाधान की तरह लगता है ...
यहाँ है CTE मैं वर्तमान में उपयोग कर रहा हूँ:
with Replies as (
select c.CommentID, c.ParentCommentID 1 as Level
from Comment c
where ParentCommentID is null and CommentID = @ParentCommentID
union all
select c.CommentID, c.ParentCommentID, r.Level + 1 as Level
from Comment c
inner join Replies r on c.ParentCommentID = r.CommentID
)
select * from Replies
किसी भी मदद की सराहना की होगी; धन्यवाद!
मैं एसक्यूएल के लिए नया हूं और पहले पदानुक्रमित डेटाटाइप के बारे में नहीं सुना था। this comment से इसके बारे में पढ़ने के बाद मैंने फैसला किया कि मैं इसे अपने डिजाइन में शामिल करना चाहता हूं। मैं इस रात के साथ प्रयोग करूँगा और अगर मुझे सफलता मिलती है तो अधिक जानकारी पोस्ट करें।
अद्यतन
मेरी नमूना डेटा, dance2die के सुझाव का उपयोग करने से वापस लौटाए गए परिणाम:
ID | ParentID | Level | DenseRank ------------------------------------- 15 NULL 1 1 20 15 2 1 21 20 3 1 17 22 3 1 22 15 2 2 31 15 2 3 32 15 2 4 33 15 2 5 34 15 2 6 35 15 2 7 36 15 2 8
एसक्यूएल देवता आपके दावों से क्रोधित हो जाते हैं – Shawn