Получить данные с первого дня в базе данных до сегодняшнего дня - PullRequest
1 голос
/ 29 апреля 2020

Я хочу сгруппировать свои данные по дате и просмотреть их на графике. вот мой пример данных:

count                            created_at
-----                            ----------
 5                               2020/04/20
 4                               2020/04/21
 3                               2020/04/25
 9                               2020/04/28

я хочу, чтобы мои данные при получении были такими, как

count                            created_at
-----                            ----------
 5                               2020/04/20
 4                               2020/04/21
 0                               2020/04/22
 0                               2020/04/23
 0                               2020/04/24
 3                               2020/04/25
 0                               2020/04/26
 0                               2020/04/27
 9                               2020/04/28

, когда в эту дату нет данных, будет показано 0. Можете ли вы, ребята, помочь мне как его получить на laravel контроллере?

спасибо раньше.

1 Ответ

0 голосов
/ 29 апреля 2020

@ Alun, вот пример того, как вы можете сделать это:

SELECT `dateList`.`Date`,
    CASE WHEN `yt`.`date` IS NULL THEN 0
    ELSE COUNT(`yt`.`id`) 
    END AS `amt`
FROM

-- this is the part you can copy/paste 
-- to be used to left join in a table of your choice 
-- ---------------------------------------------------------------------------------------------------------------------------
(
    SELECT `a`.`Date`
    FROM (
        SELECT NOW() - INTERVAL (`a`.`a` + (10 * `b`.`a`) + (100 * `c`.`a`)) DAY AS `Date`
        FROM (SELECT 0 AS `a` 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`
        CROSS JOIN (SELECT 0 AS `a` 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`
        CROSS JOIN (SELECT 0 AS `a` 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 `c`
    ) AS `a` 
    WHERE `a`.`Date` BETWEEN '2020-04-01' AND NOW()
) AS `dateList` 
-- ---------------------------------------------------------------------------------------------------------------------------

LEFT JOIN `yourTable` AS `yt` ON `dateList`.`Date` = DATE(`yt`.`date`)
GROUP BY `dateList`.`Date`
ORDER BY `dateList`.`Date` ASC

Просто подставьте имя вашей таблицы вместо yourTable в этом запросе (изменив имя столбца даты из вашей таблицы, заменив yt.date соответственно), и это даст вам список для каждого дня месяца, показывающий 0 для любого дня месяца, который не имеет никакого значения.

Если заставить это работать с помощью eloquent в Laravel контроллере, это может быть возможно, но, черт побери, я не знаю, как вы это сделаете. Вы можете использовать этот необработанный SQL в контроллере для выполнения sh того, что вы хотите.

Вот пример того, как это работает в sql fiddle.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...