【发布时间】:2011-07-19 02:20:09
【问题描述】:
鉴于以下表格,我想知道如何编写查询以仅返回包含书籍的类别以及每个类别的书籍数量。一本书可以添加到一个或多个类别中。我正在使用 PHP 和 MySQL。
这是我的桌子:
类别表
- 身份证
- 名称
- 永久链接
书桌
- 身份证
- 标题
- 作者
- 描述
- 价格
books_categories 表
- 身份证
- book_id
- category_id
【问题讨论】:
鉴于以下表格,我想知道如何编写查询以仅返回包含书籍的类别以及每个类别的书籍数量。一本书可以添加到一个或多个类别中。我正在使用 PHP 和 MySQL。
这是我的桌子:
类别表
- 身份证
- 名称
- 永久链接
书桌
- 身份证
- 标题
- 作者
- 描述
- 价格
books_categories 表
- 身份证
- book_id
- category_id
【问题讨论】:
SELECT categories.id,
COUNT(books_categories.id) AS number
FROM categories
LEFT JOIN books_categories ON books_categories.category_id = categories.id
GROUP BY categories.id
HAVING number > 0;
【讨论】:
select c.id
,c.name
,count(*) as num_books
from categories c
join books_categories bc on(bc.category_id = c.id)
group
by c.id
,c.name;
如果您还想要没有书籍的类别,请使用LEFT JOIN。
【讨论】:
SELECT *, COUNT(*) AS count
FROM books_categories AS bc
LEFT JOIN categories AS c ON c.id = bc.category_id
GROUP BY c.id
您将获得一个 count 列,其中包含每个类别的行数。书籍为零的类别(即表 books_categories 中没有条目的类别)将不会返回。
【讨论】: