我有一个像下面两个表:性能的解决方案
表媒体:
+---------------------------------------------------------+
| media_id | media_name | media_category | media_status |
+---------------------------------------------------------+
| 1 | item1 | 2 | true |
| 2 | item2 | 2 | true |
| 3 | item3 | 1 | false |
| 4 | item3 | 1 | false |
| 5 | item3 | 1 | true |
+---------------------------------------------------------+
表类别:
+--------------------+
| cat_id | cat_name |
+--------------------+
| 1 | blue |
| 2 | red |
| 3 | white |
| 4 | green |
+--------------------+
我希望检索所有类别的相关数量媒体的地位。
所以在我的例子,其结果必然是:
+--------------------------------------------------------------------------------+
| cat_id | cat_name | countMediaTotal | countMediaActive | countMediaInactive |
+--------------------------------------------------------------------------------+
| 1 | blue | 3 | 1 | 2 |
| 2 | red | 2 | 2 | 0 |
| 3 | white | 0 | 0 | 0 |
| 4 | green | 0 | 0 | 0 |
+--------------------------------------------------------------------------------+
我实际的SQL请求:
SELECT *,
(SELECT COUNT(*) FROM media AS MED WHERE CAT.cat_id = MED.media_category) AS countMediaTotal,
(SELECT COUNT(*) FROM media AS MED WHERE CAT.cat_id = MED.media_category AND media_status = 'true') AS countMediaActive,
(SELECT COUNT(*) FROM media AS MED WHERE CAT.cat_id = MED.media_category AND media_status = 'false') AS countMediaInactive
FROM `category` AS CAT
有3个类似的子查询。
有没有更强大的解决方案来实现这一目标还是最好的?
什么是 “最好的” 是什么意思? (修辞)你对某些查询表达式有一些天真含糊的概念,这些查询表达式被日常用语合理地模糊地描述。技术含义涉及在给定背景下的工程权衡。请阅读“程序优化”和“查询优化”。你可以从标签信息开始。 – philipxy
是的,你是对的。我以为只有演出 – mytom
不幸的是,我所有的评论都适用于其他更具体的单词,比如“表演”(无论你是什么意思 - 你表达的是什么?)或“速度”。任何合理的技术含义都涉及很多因素。 – philipxy