/ / MYSQL COUNT (*) pre každý riadok - mysql, count

MYSQL COUNT (*) pre každý riadok - mysql, count

Mám vo svojej databáze dve tabuľky. Prvá je category (Categorytbl)

Category
ID | Category

Druhá je pre items (Itemstbl)

Items
id | ItemName | CategoryID | Date | Description

Teraz musím vybrať a počítať COUNT(*) všetky položky z categoryID ale mám problém, pretože môžem zaradiť jednu položku do viacerých kategórií

Takže, keď urobím zoznam všetkých kategórií, potrebujem vedieť, koľko položiek mám v každej kategórii

kategórie SUV (4 položiek)

Offroad (43 položiek)

napríklad

Mám položku CAR -> Môžem dať auto do SUV, Luxury, Offroad ...

thx za pomoc

odpovede:

1 pre odpoveď č. 1
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

0 pre odpoveď č. 2

Je to to, čo hľadáte?

 SELECT Category, count(*) from Category as c, Items as i
WHERE c.ID = i.CategoryID
GROUP BY Category
ORDER BY count DESC

0 pre odpoveď č. 3

Riešenie pripomienok, znie to, ako potrebujetepre refaktorovanie vášho dátového modelu, pretože chcete, aby medzi mnohými položkami a kategóriami existoval vzťah typu M - N (M - N), pričom máte údaje, ktoré nie sú v 1NF (pretože sú oddelené čiarkami).

To možno dosiahnuť pomocou tabuľky priesečníkov (známa aj ako tabuľka križovatiek: tu je príklad Wikipédie).

Ak chcete počítať počet kategórií pre každú položku (ktorá má aspoň 1 kategóriu):

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

A počítať počet položiek pre každú kategóriu (ktorá má aspoň 1 položku):

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

Ak by ste chceli zahrnúť aj položky / kategórie, pre ktoré neexistovali žiadne kategórie / položky, môžete LEFT JOIN k príslušnej tabuľke.