Php 棘手的mysql查询在几个类别中统计记录
以下是我的数据结构: 有多个项目,每个项目最多可有3个类别Php 棘手的mysql查询在几个类别中统计记录,php,mysql,Php,Mysql,以下是我的数据结构: 有多个项目,每个项目最多可有3个类别 categories id name ----------------------- 1 cat1 2 cat2 3 cat3 items id name category1 category2 category3 ----------------------------------------------- 1 item1 1 2 3 2 item
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\u WS
为项目定义一个视图,该视图将所有3个类别转换为一个分隔字符串,然后使用FIND\u IN\u SET
查询它,但我认为应该有更好/更快的方法。有什么想法吗
谢谢您可以使用where category1、category2或category3执行select子查询来统计类别中的项目
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
你能改变你的桌子设计吗?你这么问真有趣。。不幸的是不是:(我没有设计它,它已经是一个活的系统