这是我的数据结构: 有项目,每个项目最多可以有3个类别
categories
id name
-----------------------
1 cat1
2 cat2
3 cat3
items
id name category1 category2 category3
-----------------------------------------------
1 item1 1 2 3
2 item2 1 2
3 item3 2 1 3
4 item4 2 3
5 item5 3 1 2
期望的输出:
cat cat_name total_items
-----------------------------------------------
1 cat1 4
2 cat2 5
3 cat3 4
我实现它的唯一方法是使用CONCAT_WS
定义项目视图,将所有3个类别转换为分隔字符串,然后使用FIND_IN_SET
查询它但我认为应该有更好/更快的方式。任何想法?
感谢
答案 0 :(得分:4)
您可以使用选择子查询来计算类别中的项目,方法是使用category1,category2或category3。
SELECT c.*,
(SELECT COUNT(id) FROM items i WHERE i.category1 = c.id OR i.category2 = c.id OR i.category3 = c.id) as total_items
FROM categories c