MYSQL COUNT (*) لكل صف

لدي جدولين في DB الخاص بي. الأول هو الفئة (categorytbl)

Category
ID | Category

الثاني هو لعناصر (itemstbl)

Items
id | ItemName | CategoryID | Date | Description

الآن أحتاج إلى تحديد وإحصاء COUNT (*) جميع العناصر من categoryID ولكن لدي مشكلة لأنني أستطيع وضع عنصر واحد في أكثر من فئة واحدة

لذا ، عندما أقوم بعمل قائمة بجميع الفئات ، يجب أن أعرف عدد العناصر التي لدي في كل فئة

الفئة SUV (4 المقالات)

الطرق الوعرة (43 سلعة)

فمثلا

I have item CAR -> i can put car into SUV, Luxury, Offroad...

تشك للمساعدة

1
إذا كان يمكن للعنصر أن يحتوي على فئات متعددة ، فحينئذٍ تكون كلمة datamodel غير صحيحة .. أنت تقوم بإنشاء نموذج لعلاقة 1xN ، عندما يجب أن يكون NxN (على سبيل المثال ، ينتمي عنصر واحد إلى العديد من الفئات ، ويمكنك العثور على العديد من العناصر في فئة واحدة)
وأضاف المؤلف pleasedontbelong, مصدر
تصميم بين أطراف متعددة . إنشاء جدول itermediary items_categories حيث PK هو item_id و category_id (كلاهما أيضًا FK) ، يجب أن يكون استعلام Count بسيطًا مثل SELECT COUNT (*) FROM items_categories WHERE category_id = 123
وأضاف المؤلف pleasedontbelong, مصدر
ما اقتراحك من؟ لدى الكثير من الفئات ويمكن أن تحتوي كل فئة على الكثير من العناصر ويمكن أن تحتوي كل عنصر على أكثر من فئة واحدة
وأضاف المؤلف user999568, مصدر

3 إجابة

SELECT c.id, c.category, count(c.id) as cat_count
FROM items i
INNER JOIN category c ON (i.category_id = c.id)
GROUP BY c.id
1
وأضاف

عند معالجة التعليقات ، يبدو أنك بحاجة إلى إعادة تنقيح نموذج البيانات الخاص بك لأنك تريد علاقة بين أطراف متعددة (M إلى N) بين العناصر والفئات ، في حين أن لديك بيانات غير موجودة في 1NF (حيث يتم الفصل بينها بفواصل).

يمكن تحقيق ذلك باستخدام جدول تقاطع (يُعرف أيضًا بجدول الوصلات: إليك مثال Wikipedia ) .

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

SELECT item_id, count(*) 
FROM junction_table
GROUP BY item_id

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

SELECT category_id, count(*) 
FROM junction_table
GROUP BY category_id

إذا أردت تضمين عناصر/فئات لا توجد فئات/عناصر لها ، فيمكنك LEFT JOIN الوصول إلى الجدول المناسب.

0
وأضاف

هل هذا ما كنت تبحث عنه؟

 SELECT Category, count(*) from Category as c, Items as i
 WHERE c.ID = i.CategoryID
 GROUP BY Category
 ORDER BY count DESC
0
وأضاف
لدي مشكلة في البنود الخاصة بي في هذا المجال لدي أكثر من فئة 1،44،22،55 تم تصنيفها بفاصلة ، لذا حصلت على جميع البيانات من هذا الحقل
وأضاف المؤلف user999568, مصدر