すべての行のMYSQL COUNT(*)

私はDBに2つのテーブルを持っています。最初は category (categorytbl)です

Category
ID | Category

2番目は items (itemstbl)です

Items
id | ItemName | CategoryID | Date | Description

categoryID のすべてのアイテムを選択してカウントする必要がありますが、複数のカテゴリに1つのアイテムを入れることができます

だから、私がすべてのカテゴリのリストを作成するとき、私はどのカテゴリにどれくらいのアイテムがあるのか​​を知る必要があります

カテゴリー SUV(4アイテム)

オフロード(43アイテム)

例えば

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

助けてくれる

1
追加された 編集された
ビュー: 4
1つのアイテムが複数のカテゴリを持つことができる場合、データモデルは間違っています.1xNの関係をNxNにする必要があります(たとえば、1つのアイテムが多数のカテゴリに属しています。
追加された 著者 pleasedontbelong,
多対多の設計。 PKが item_idcategory_id (両方ともFK)のitermediaryテーブル items_categories を作成すると、Countクエリは SELECT COUNT(*)FROM items_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以外のデータがあります。

これは、交差テーブル(ジャンクションテーブルとも呼ばれます:ここではWikipediaの例です)を使用して実行できます。 。

各項目のカテゴリの数をカウントするには(カテゴリが少なくとも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つ以上のカテゴリを持っているので、私はそのフィールドからすべてのデータを持ってどのようにコンマでsepparated 1,44,22,55
追加された 著者 user999568,