Php 对MYSQL中的数据进行分解和分组

Php 对MYSQL中的数据进行分解和分组,php,mysql,Php,Mysql,我不是MYSQL查询的高手,但这一次让我很难找到实现这一点的最佳方法,我的基本示例MYSQL数据是: INSERT INTO `spending` (`spend_id`, `spend_user_id`, `spend_sender_id`, `spend_offer_id`, `spend_amount`, `spend_click`, `spend_date`) VALUES (2, 190, 190, 34591, '0.15', 1, '2018-05-14 22:39:47'), (

我不是MYSQL查询的高手,但这一次让我很难找到实现这一点的最佳方法,我的基本示例MYSQL数据是:

INSERT INTO `spending` (`spend_id`, `spend_user_id`, `spend_sender_id`, `spend_offer_id`, `spend_amount`, `spend_click`, `spend_date`) VALUES
(2, 190, 190, 34591, '0.15', 1, '2018-05-14 22:39:47'),
(3, 190, 190, 34591, '0.15', 1, '2018-05-14 22:39:52'),
(4, 190, 7, 34591, '0.15', 1, '2018-05-14 22:40:07'),
(5, 190, 10, 34591, '0.15', 1, '2018-05-14 22:42:15'),
(6, 190, 7, 34591, '0.15', 1, '2018-05-15 06:55:56'),
(7, 190, 7, 34591, '0.15', 1, '2018-05-16 17:05:29'),
(8, 190, 7, 34591, '0.15', 1, '2018-05-16 17:05:32');
我的目标是将数据分解为两个主要部分单击,基本上每个条目都被视为一次单击,html仪表板如下所示:

然后是4个小节


这四个子部分是今天、昨天、上周、上个月的点击次数和成本,我不知道最好的方法,请提供任何指导

对于今天、昨天、每周、每月显示的每一列,都需要单独的子查询

例如,要获取当月的最新结果,请使用此子查询

        SELECT COUNT(*) clicks, SUM(spend_amount) spend_amount
          FROM spending
         WHERE spend_date >= LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
一旦拥有了所有这些子查询,就可以将它们连接在一起以获得结果。请注意:每个子查询只产生一行,因此连接它们时不需要 ON条件也会产生一行

像这样的


我猜你的意思,确切地说,到今天,昨天,一周,一个月。在您的报告具有商业意义之前,您需要弄清楚这一点。

您自己是否尝试过这样做?恐怕情况非常糟糕,我可能会显示许多错误的代码和查询,但这些代码和查询不起作用!到目前为止,我已经花了大量的时间在它上面。展示你认为最接近的一个,如果没有其他东西的话,它会给我们一个关于你想做的事情的细节,只是想在OP说这不是期望的输出之前添加,因为这个答案正是我会做的。如果需要将当前星期的日期与星期日或星期一进行比较,可以使用date_ADDcurrent_date,INTERVAL1-DAYOFWEEKcurrent_date DAY获得最后一个星期日,将1-DAYOFWEEK更改为2-DAYOFWEEK获得星期一。您也可以使用DATE_FORMATNOW,“%Y-%m-01”来获取当前月份的第一个。这确实是所需的结果,非常感谢,我的测试离目标很远。
SELECT today.clicks, today.spend_amount, 
       yesterday.clicks, yesterday.spend_amount,
       week.clicks, week.spend_amount,
       month.clicks, month.spend_amount
  FROM
           (SELECT COUNT(*) clicks, SUM(spend_amount) spend_amount
              FROM spending
             WHERE spend_date >= CURDATE()) today
   JOIN           
           (SELECT COUNT(*) clicks, SUM(spend_amount) spend_amount
              FROM spending
             WHERE spend_date >= CURDATE() - INTERVAL 1 DAY
               AND spend_date < CURDATE()) yesterday
   JOIN
           (SELECT COUNT(*) clicks, SUM(spend_amount) spend_amount
              FROM spending
             WHERE spend_date >= CURDATE() - INTERVAL 7 DAY
               AND spend_date < CURDATE()) week
   JOIN        
           (SELECT COUNT(*) clicks, SUM(spend_amount) spend_amount
              FROM spending
             WHERE spend_date >= LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH) month