簡體   English   中英

獲取一周中的每一天作為MySQL和PHP列

[英]Get each day of the week as columns MySQL and PHP

我正在用PHP編寫PHP的Web應用程序。

我有一個名為count的表,這是數據存儲在該表中的方式:

Table: counts

id   counts   location_id   media_id   created_at
--------------------------------------------------
1     50         1             1        2017-03-15
2     30         2             1        2017-03-15
3     80         1             2        2017-03-15
4     20         1             1        2017-03-16
5     100        2             2        2017-03-16

對於每個唯一的location_id,media_id和created_at,我存儲計數。

我有另一個表位置,如下所示:

Table: locations

id       name
----------------
1     Location 1
2     Location 2
3     Location 3
4     Location 4
5     Location 5

這是我目前的SQL查詢:

select sum(counts.count) as views, locations.name as locations, DAYNAME(counts.created_at) AS weekday from `counts` inner join `locations` on `locations`.`id` = `counts`.`location_id` where `counts`.`created_at` between '2016-12-04' and '2016-12-10' group by `weekday`, `counts`.`location_id`;

這是數據的顯示方式:

locations     weekday     views
-----------------------------------
Location 1    Mon          50
Location 1    Tue          30
Location 2    Mon          20
Location 2    Tue          70

我正在創建報告,並且我想運行一個查詢,以便一周中的所有日子都顯示為一列,其相應的值作為一周中該日的查看計數。 我想要這樣的東西:

locations     mon   tue  wed  thu  fri  sat   sun
-------------------------------------------------
Location 1    40    60   51   20   40   20    30
Location 2    80    60   100  24   30   10    5

以上是可能在MySQL或我將不得不使用PHP來實現這一點? 如果是這樣,我該怎么做呢?

任何幫助將不勝感激,謝謝。

注意:樣本數據不准確。

使用條件聚合可以使用MySQL實現此結果。

訣竅是在SELECT列表中的表達式中使用條件測試來確定是否返回count值。

像這樣的東西:

 SELECT l.name                                                  AS `locations`
      , SUM(IF(DATE_FORMAT(c.created_at,'%a')='Mon',c.count,0)) AS `mon`
      , SUM(IF(DATE_FORMAT(c.created_at,'%a')='Tue',c.count,0)) AS `tue`
      , SUM(IF(DATE_FORMAT(c.created_at,'%a')='Wed',c.count,0)) AS `wed`
      , SUM(IF(DATE_FORMAT(c.created_at,'%a')='Thu',c.count,0)) AS `thu`
      , SUM(IF(DATE_FORMAT(c.created_at,'%a')='Fri',c.count,0)) AS `fri`
      , SUM(IF(DATE_FORMAT(c.created_at,'%a')='Sat',c.count,0)) AS `sat`
      , SUM(IF(DATE_FORMAT(c.created_at,'%a')='Sun',c.count,0)) AS `sun`
   FROM `locations` l
   LEFT
   JOIN `counts` c
     ON c.location_id = l.id
    AND c.created_at >= '2016-12-04'
    AND c.created_at  < '2016-12-04' + INTERVAL 7 DAY 
  GROUP BY l.name
  ORDER BY l.name

注意:

對於樣本數據, location_id=1 and created_at='2016-03-15'有兩行,因此該查詢將返回總計130(對於tue (= 50 + 80),而不是50(如示例中所示)輸出現有查詢)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM