Әр жолы үшін MYSQL COUNT (*)

Менде екі кесте бар. Бірінші санаты (categorytbl)

Category
ID | Category

Екіншісі items (itemstbl)

Items
id | ItemName | CategoryID | Date | Description

Енді categoryID дегеннің барлық элементтерін COUNT (*) таңдау және санау керек, бірақ бір мәселені бірнеше санатқа қоюға болады

Сондықтан барлық категориялардың тізімін жасаған кезде әр санаттағы қанша элемент бар екенін білуім керек

санаты SUV (4 дана)

Offroad (43 дана)

Мысалға

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

көмек көрсету үшін thx

1
Егер элементте бірнеше санат болуы мүмкін болса, онда datamodel дұрыс емес. Сіз NxN болуы керек кезде 1xN қатынастарын модельдеудесіз (мысалы, бір элемент көптеген санаттарға жатады және бір санаттағы көптеген элементтерді табуға болады)
қосылды автор pleasedontbelong, көзі
Көптеген Дизайн . item_id және category_id (екеуі де FK) болып табылатын, items_categories элементінің кестесін жасаңыз, Count SELECT COUNT (*) item_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 емес (бұл үтірмен бөлінген) деректер бар.

Бұл қиылысу кестесі арқылы жүзеге асуы мүмкін (сонымен қатар, қиылысу кестесі ретінде белгілі: Мында википедиялық мысал ) .

Әр элемент үшін санаттар санын санау (кемінде 1 санат бар):

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

Әр санат үшін элементтердің санын (кемінде 1 элемент бар) санау үшін:

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
қосылды
Мен осы санаттағы CategoryID элементімде проблема туындады, менде бұл өрістен барлық деректерді қалай алғанымды білуіме 1,44,22,55 санаты бар үтірмен бөлінген
қосылды автор user999568, көзі