Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 棘手的mysql查询在几个类别中统计记录_Php_Mysql - Fatal编程技术网

Php 棘手的mysql查询在几个类别中统计记录

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

以下是我的数据结构: 有多个项目,每个项目最多可有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\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

你能改变你的桌子设计吗?你这么问真有趣。。不幸的是不是:(我没有设计它,它已经是一个活的系统