【问题标题】:Get data from first date on database till today从数据库的第一个日期到今天获取数据
【发布时间】:2020-04-29 04:06:26
【问题描述】:

我想按日期对数据进行分组并在图表上查看。这是我的数据示例:

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 控制器上获取它吗?

之前谢谢。

【问题讨论】:

  • 请分享您有问题的数据库结构
  • 如果您没有特定日期的任何记录,您可能需要运行另一个循环

标签: mysql laravel eloquent


【解决方案1】:

@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 DATE(`a`.`Date`) AS `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没有任何价值的月份。

就在 Laravel 控制器中使用 eloquent 来实现这一点而言,这可能是可能的,但我不知道你会怎么做。你可以在控制器中使用这个原始 SQL 来完成你想要的。

Here's an example of how it works in sql fiddle.

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-06-22
    • 2022-11-15
    • 1970-01-01
    • 2020-04-16
    • 2014-05-04
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多