我有两张桌子。名称表有一个名为“categories”的外键。另一个表是包含类别名称的“类别”。名称表引用类别表中的类别。
所以我用这个:
$categories = "SELECT name, COUNT(*) category";
$number_of_categories = "SELECT category, COUNT(1) FROM name GROUP BY category";
如您所见,我正在做两个选择语句。我听说加入表可以做魔术,请教我如何在一个SELECT语句中执行此操作。
基本上我想从类别表中选择所有行,然后计算名称表中每个类别的实例数。
答案 0 :(得分:3)
SELECT c.name, COUNT(n.category) AS count_in_name_table
FROM categories c
LEFT JOIN name n ON n.category = c.name
GROUP BY c.name
答案 1 :(得分:1)
您可以计算子查询中的名称数量:
select category.name
, (
select count(*)
from category
) as CategoryCount
, (
select count(*)
from name
where name.category = category.name
) as NameCount
from category
答案 2 :(得分:1)
假设类别表的名称是“Category”(带category_name和category_id),名称表的名称是“Name”(带有name_id和category_id):
SELECT C.category_name, COUNT(N.name_id) FROM Category C
LEFT JOIN Name N ON C.category_id=N.category_id
GROUP BY C.category_name
分组允许您计算每个类别名称的所有名称条目。
答案 3 :(得分:0)
你可能设计不好。
- 名称表有一个外键'categories'。
- 'categories'-table包含类别的名称。
- 名称表引用类别表中的类别。
两个表是否相互引用?或者它只是常见名称“名称”和“类别”的结果?
如果您有1:1
关系,这意味着每个类别都有一个名称,每个名称都有一个类别,您可以将它们放在一个表中。
如果您有1:n
关系,则一个类别绑定到多个名称,该关系将在类别表中指定。如果它是n:1
关系,反之亦然。
我想我们需要一些样本数据或更多解释,才能真正得到帮助。