Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
MySQL优化-防止子查询_Mysql_Optimization - Fatal编程技术网

MySQL优化-防止子查询

MySQL优化-防止子查询,mysql,optimization,Mysql,Optimization,我是否可以更改此查询,以便将计数(其中type\u id=2)作为成功,将计数(其中type\u id=1)作为错误来防止使用子查询 SELECT (SELECT COUNT(id) FROM log AS success_log WHERE type_id = 2 AND site_id = site.id AND DAYOFYEAR(success_log.created)) AS success, (SELECT COUNT(

我是否可以更改此查询,以便将
计数(其中type\u id=2)作为成功,将计数(其中type\u id=1)作为错误来防止使用子查询

SELECT
                (SELECT COUNT(id) FROM log AS success_log WHERE type_id = 2 AND site_id = site.id AND DAYOFYEAR(success_log.created)) AS success,
                (SELECT COUNT(id) FROM log AS success_log WHERE type_id = 1 AND site_id = site.id AND DAYOFYEAR(success_log.created)) AS error,
                (SELECT COUNT(id) FROM log AS success_log WHERE site_id = site.id AND DAYOFYEAR(success_log.created)) AS total,
                DATE_FORMAT(log.created, "%m-%d-%y") AS `day`
            FROM log
            WHERE site_id = ?
            GROUP BY DAYOFYEAR(created)`

您可以将single count与GroupBy TypeId一起使用,并将它们插入临时表,然后选择所需的方式。

您可以将single count与GroupBy TypeId一起使用,并将它们插入临时表,然后选择所需的方式。

因为它们都是从同一站点的日志表中查询的,您只需在表中运行一次,然后在sum中应用并立即执行IF()测试。。。。如果记录为给定类型,则计数为1,否则为0。。。获取类型1或类型2的总和,简单计数(*)获取所述日期的总计数

SELECT
      DATE_FORMAT(log.created, "%m-%d-%y") AS `day`,
      sum( if( type_id = 2, 1, 0 )) as NumberSuccess,
      sum( if( type_id = 1, 1, 0 )) as NumberError,
      count(*) as TotalRecords
   from
      log
   where
      site_id = ?
   group by
      DAYOFYEAR(created)

因为它们都是从同一站点的日志表中查询的,所以您可以只运行一次该表,然后在sum中应用并立即执行IF()测试。。。。如果记录为给定类型,则计数为1,否则为0。。。获取类型1或类型2的总和,简单计数(*)获取所述日期的总计数

SELECT
      DATE_FORMAT(log.created, "%m-%d-%y") AS `day`,
      sum( if( type_id = 2, 1, 0 )) as NumberSuccess,
      sum( if( type_id = 1, 1, 0 )) as NumberError,
      count(*) as TotalRecords
   from
      log
   where
      site_id = ?
   group by
      DAYOFYEAR(created)
查看sum(如果…)或sum(当…语法时的情况)查看sum(如果…)或sum(当…语法时的情况