Задать вопрос
  • Можно ли обойтись одним запросом?

    profit
    @profit
    Разработка | Оптимизация. Telegram: @evzavyalov
    табличка с данными
    CREATE TABLE `t_otp` (
    	`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
    	`dt_start` DATE NULL DEFAULT NULL,
    	`dt_end` DATE NULL DEFAULT NULL,
    	`fio` VARCHAR(50) NULL DEFAULT NULL,
    	PRIMARY KEY (`id`)
    )
    COLLATE='utf8_general_ci'
    ENGINE=InnoDB;
    
    INSERT INTO `t_otp` (`id`, `dt_start`, `dt_end`, `fio`) VALUES
    	(1, '2015-03-07', '2015-03-10', 'Ваня'),
    	(2, '2015-03-08', '2015-03-12', 'Ира');


    запрос
    select concat(tab.date,' число - ', 
           (select count(1) from t_otp where tab.date between dt_start and dt_end)
        , ' сотрудника в отпуске ') abb
      from (
    SELECT '2015-03-06' + INTERVAL(CAST(CONCAT(CAST(a.num AS CHAR), CAST(b.num AS CHAR)) AS UNSIGNED)) DAY `date`
     FROM
    (SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a,
    (SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
    WHERE '2015-03-06' + INTERVAL(CAST(CONCAT(CAST(a.num AS CHAR), CAST(b.num AS CHAR)) AS UNSIGNED)) DAY <= '2015-03-13'
    ORDER BY 1
    ) tab


    результат
    2015-03-06 число - 0 сотрудника в отпуске
    2015-03-07 число - 1 сотрудника в отпуске
    2015-03-08 число - 2 сотрудника в отпуске
    2015-03-09 число - 2 сотрудника в отпуске
    2015-03-10 число - 2 сотрудника в отпуске
    2015-03-11 число - 1 сотрудника в отпуске
    2015-03-12 число - 1 сотрудника в отпуске
    2015-03-13 число - 0 сотрудника в отпуске


    оптимизируйте дальше сами...
    Ответ написан
    Комментировать