/ / MYSQL COUNT (*) per ogni riga: mysql, count

MYSQL COUNT (*) per ogni riga: mysql, count

Ho due tabelle nel mio DB. Il primo è category (Categorytbl)

Category
ID | Category

Il secondo è per items (Itemstbl)

Items
id | ItemName | CategoryID | Date | Description

Ora ho bisogno di selezionare e contare COUNT(*) tutti gli articoli da categoryID ma ho un problema perché posso mettere un oggetto in più di una categoria

Quindi, quando faccio l'elenco di tutte le categorie, ho bisogno di sapere quanti oggetti ho in ogni categoria

categoria SUV (4 articoli)

Offroad (43 articoli)

per esempio

Ho un oggetto AUTO -> Posso mettere la macchina in SUV, Lusso, Offroad ...

grazie per l'aiuto

risposte:

1 per risposta № 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 per risposta № 2

E 'questo quello che stai cercando?

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

0 per risposta № 3

Affrontando i commenti, sembra che tu ne abbia bisognoper refactoring il tuo modello di dati perché si desidera una relazione molti-a-molti (da M a N) tra articoli e categorie, mentre si hanno dati che non sono in 1NF (dal momento che è separato da virgola).

Questo può essere ottenuto utilizzando una tabella di intersezione (nota anche come tabella di giunzione: ecco un esempio di Wikipedia).

Per contare il numero di categorie per ogni articolo (che ha almeno 1 categoria):

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

E per contare il numero di articoli per ogni categoria (che ha almeno 1 elemento):

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

Se si desidera includere anche articoli / categorie per i quali non ci sono categorie / articoli, è possibile LEFT JOIN alla tabella appropriata.