عد جميع الوظائف التي تنتمي إلى فئة و الفئات الفرعية

StackOverflow https://stackoverflow.com/questions/1803905

سؤال

أقدر لك بعض المساعدة في مشكلتي:

لدي 2 الجداول الخلية ، فئات الوظائف المنصوص عليها (المبسطة) مثل ذلك:

فئات:

CATID - اسم - parent_id

وظائف:

PID - اسم الفئة

ما أود القيام به هو الحصول على المبلغ الإجمالي من الوظائف لكل فئة ، بما في ذلك أي الوظائف في الفئات الفرعية.

الآن أنا على الحصول على مجموع عدد الوظائف في كل (المستوى الأعلى) فئة (ولكن ليس فرعية) بفعل:

"SELECT c.*, COUNT(p.PID) as postCount 
        FROM categories AS c LEFT JOIN posts AS p 
        ON (c.CATID = p.category) 
        WHERE c.parent='0' GROUP BY c.CATID ORDER BY c.name ASC"; 

السؤال مرة أخرى هو: كيف يمكنني الحصول على المبلغ مجاميع لكل فئة بما في ذلك مجاميع كل ذات الفئة الفرعية?

إعادة هيكلة قاعدة البيانات إلى مجموعة متداخلة شكل غير ممكن ، كما أنا الحفاظ على النظام القائم.

شكرا على مساعدتكم!

هل كانت مفيدة؟

المحلول

إذا الفئات ليست متداخلة بلا حدود, يمكنك الانضمام لهم مستوى واحد في وقت واحد.هنا مثال على ما يصل إلى 3 مستويات من التداخل:

SELECT c.name, COUNT(DISTINCT p.PID) as postCount 
FROM categories AS c 
LEFT JOIN categories AS c2
    ON c2.parent = c.catid
LEFT JOIN categories AS c3
    ON c3.parent = c2.catid
LEFT JOIN posts AS p 
    ON c.CATID = p.category
    OR c2.CATID = p.category
    OR c3.CATID = p.category
WHERE c.parent = '0' 
GROUP BY c.CATID, c.name
ORDER BY c.name ASC

نصائح أخرى

أعتقد أنك تريد أن ننظر إلى التراكمي المشغل.وأعتقد أن هذا سوف تحصل على ما تريد.

http://msdn.microsoft.com/en-us/library/ms189305(SQL.90).aspx

راندي

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top