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