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 № 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 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.