多くの場合、データベースアイテムのリストと、各アイテムに関する特定の集計番号を表示する必要があります。たとえば、Stack Overflowでタイトルテキストを入力すると、[関連する質問]リストが表示されます。このリストには、関連するエントリのタイトルと、各タイトルの単一の集計された回答数が表示されます。
同様の問題がありますが、複数の集計が必要です。ユーザーオプションに応じて、3つの形式のいずれかでアイテムのリストを表示したい:
- 私のアイテムの名前(合計15、私が所有する13)
- 私のアイテムの名前(合計15)
- 私のアイテムの名前(私が所有する13)
私のデータベースは次のとおりです。
- アイテム:itemId、itemName、ownerId
- カテゴリ:catId、catName
- マップ:mapId、itemId、catId
以下のクエリは、カテゴリ名、カテゴリごとのアイテムIDの数を取得します。
SELECT
categories.catName,
COUNT(map.itemId) AS item_count
FROM categories
LEFT JOIN map
ON categories.catId = map.catId
GROUP BY categories.catName
これは次のようになります:カテゴリ名、このowner_idのみのカテゴリごとのアイテムIDの数
SELECT categories.catName,
COUNT(map.itemId) AS owner_item_count
FROM categories
LEFT JOIN map
ON categories.catId = map.catId
LEFT JOIN items
ON items.itemId = map.itemId
WHERE owner = @ownerId
GROUP BY categories.catId
しかし、1つのクエリで同時にそれらを取得するにはどうすればよいですか?つまり、カテゴリ名、カテゴリごとのアイテムIDの数、このowner_idのみのカテゴリごとのアイテムIDの数
ボーナス。オプションで、これらのいずれかについてcatId count!= 0のみを取得するにはどうすればよいですか?「WHEREitem_count<>0」を試してみると、次のようになります。
MySQL said: Documentation
#1054 - Unknown column 'rid_count' in 'where clause'