鉴于以下表格,我想知道如何编写查询以仅返回包含书籍的类别以及每个类别的书籍数量。可以在一个或多个类别中添加书籍。我正在使用PHP和MySQL。
以下是我的表格:
类别表
- id
- 姓名
- 永久链接
书籍表
- id
- 标题
- 作者
- 说明
- 价格
books_categories表
- id
- book_id
- category_id
答案 0 :(得分:5)
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
。
答案 1 :(得分:2)
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
列,其中包含每个类别的行数。
答案 2 :(得分:1)
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;