棘手的mysql查询计数几个类别中的记录

时间:2015-12-16 19:35:37

标签: php mysql

这是我的数据结构: 有项目,每个项目最多可以有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查询它但我认为应该有更好/更快的方式。任何想法?

感谢

1 个答案:

答案 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