微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 如何生成星期表并按日和小时分组

首先,要明确;有一个这样的例子:

enter image description here

我可以通过这个查询获得课程:

$qb
    ->select("c")
    ->from("ATLReservationBundle:Course", "c")
    ->where("WEEK(c.courseDate, 1) = WEEK(CURRENT_DATE(), 1)")
    ->orderBy("c.courseDate", "ASC");

QueryResult中:

{   "courses": [
    {
      "id": 110,
      "name": "Pilates",
      "quota": 8,
      "course_date": "2015-08-31T12:15:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 135,
      "name": "Spinning",
      "quota": 8,
      "course_date": "2015-08-31T19:30:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 154,
      "name": "Kick Box",
      "quota": 6,
      "course_date": "2015-08-31T20:00:00+0000",
      "studio": {
        "id": 1,
        "name": "Stüdyo 1"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 133,
      "name": "Spinning",
      "quota": 8,
      "course_date": "2015-09-01T12:15:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 113,
      "name": "Crunch 30 Min.",
      "quota": 8,
      "course_date": "2015-09-01T18:30:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 112,
      "name": "Pilates",
      "quota": 8,
      "course_date": "2015-09-01T19:00:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 150,
      "name": "Spinning",
      "quota": 8,
      "course_date": "2015-09-01T19:30:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 136,
      "name": "TRX Group",
      "quota": 5,
      "course_date": "2015-09-01T20:00:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 159,
      "name": "Pilates",
      "quota": 8,
      "course_date": "2015-09-02T10:00:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 156,
      "name": "Stretching",
      "quota": 7,
      "course_date": "2015-09-02T18:30:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 127,
      "name": "Zumba",
      "quota": 6,
      "course_date": "2015-09-02T19:00:00+0000",
      "studio": {
        "id": 1,
        "name": "Stüdyo 1"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 148,
      "name": "Kick Box",
      "quota": 6,
      "course_date": "2015-09-02T20:00:00+0000",
      "studio": {
        "id": 1,
        "name": "Stüdyo 1"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 138,
      "name": "Crunch 30 Min.",
      "quota": 8,
      "course_date": "2015-09-03T12:15:00+0000",
      "studio": {
        "id": 1,
        "name": "Stüdyo 1"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 121,
      "name": "Pilates",
      "quota": 8,
      "course_date": "2015-09-03T19:00:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 117,
      "name": "TRX",
      "quota": 8,
      "course_date": "2015-09-03T20:00:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 131,
      "name": "Spinning",
      "quota": 8,
      "course_date": "2015-09-03T20:00:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 142,
      "name": "Pilates",
      "quota": 8,
      "course_date": "2015-09-04T12:15:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 147,
      "name": "LBT 30 min.",
      "quota": 8,
      "course_date": "2015-09-04T19:00:00+0000",
      "studio": {
        "id": 1,
        "name": "Stüdyo 1"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 141,
      "name": "Crunch 30 Min.",
      "quota": 8,
      "course_date": "2015-09-04T19:30:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    },
    {
      "id": 130,
      "name": "Crunch 30 Min.",
      "quota": 8,
      "course_date": "2015-09-05T14:00:00+0000",
      "studio": {
        "id": 2,
        "name": "Stüdyo 2"
      },
      "trainer": {
        "id": 1,
        "name": "-"
      }
    }   ] }

但我想将这些数据分组为;

DAY - 31
    HOUR - 12:15 > Coursename
    HOUR - 19:30 > Coursename
DAY - 01
    HOUR - 10:00...

我不知道怎么做,有人吗?

UPDATE

查询

   $qb
        ->select("c, HOUR(c.courseDate) as hour, DAY(c.courseDate) as day")
        ->from("ATLReservationBundle:Course", "c")
        ->where("WEEK(c.courseDate, 1) = WEEK(CURRENT_DATE(), 1)")
        ->orderBy("c.courseDate", "ASC")
        ->groupBy("hour, day");

但;这个查询有问题我不能按小时(c.courseDate),DAY(c.courseDate)分组,因为我收到了这个错误

Error: Cannot group by undefined identification or result variable.

因此,我将时间和日期定义为选择区域中的变量.
我不希望将日和小时视为不同的变量.

QueryResult中:

{
  "courses": [
    {
      "0": {
        "id": 110,
        "name": "Pilates",
        "quota": 8,
        "course_date": "2015-08-31T12:15:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "12",
      "day": "31"
    },
    {
      "0": {
        "id": 135,
        "name": "Spinning",
        "quota": 8,
        "course_date": "2015-08-31T19:30:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "19",
      "day": "31"
    },
    {
      "0": {
        "id": 154,
        "name": "Kick Box",
        "quota": 6,
        "course_date": "2015-08-31T20:00:00+0000",
        "studio": {
          "id": 1,
          "name": "Stüdyo 1"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "20",
      "day": "31"
    },
    {
      "0": {
        "id": 133,
        "name": "Spinning",
        "quota": 8,
        "course_date": "2015-09-01T12:15:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "12",
      "day": "1"
    },
    {
      "0": {
        "id": 113,
        "name": "Crunch 30 Min.",
        "quota": 8,
        "course_date": "2015-09-01T18:30:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "18",
      "day": "1"
    },
    {
      "0": {
        "id": 112,
        "name": "Pilates",
        "quota": 8,
        "course_date": "2015-09-01T19:00:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "19",
      "day": "1"
    },
    {
      "0": {
        "id": 136,
        "name": "TRX Group",
        "quota": 5,
        "course_date": "2015-09-01T20:00:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "20",
      "day": "1"
    },
    {
      "0": {
        "id": 159,
        "name": "Pilates",
        "quota": 8,
        "course_date": "2015-09-02T10:00:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "10",
      "day": "2"
    },
    {
      "0": {
        "id": 156,
        "name": "Stretching",
        "quota": 7,
        "course_date": "2015-09-02T18:30:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "18",
      "day": "2"
    },
    {
      "0": {
        "id": 127,
        "name": "Zumba",
        "quota": 6,
        "course_date": "2015-09-02T19:00:00+0000",
        "studio": {
          "id": 1,
          "name": "Stüdyo 1"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "19",
      "day": "2"
    },
    {
      "0": {
        "id": 148,
        "name": "Kick Box",
        "quota": 6,
        "course_date": "2015-09-02T20:00:00+0000",
        "studio": {
          "id": 1,
          "name": "Stüdyo 1"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "20",
      "day": "2"
    },
    {
      "0": {
        "id": 138,
        "name": "Crunch 30 Min.",
        "quota": 8,
        "course_date": "2015-09-03T12:15:00+0000",
        "studio": {
          "id": 1,
          "name": "Stüdyo 1"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "12",
      "day": "3"
    },
    {
      "0": {
        "id": 121,
        "name": "Pilates",
        "quota": 8,
        "course_date": "2015-09-03T19:00:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "19",
      "day": "3"
    },
    {
      "0": {
        "id": 117,
        "name": "TRX",
        "quota": 8,
        "course_date": "2015-09-03T20:00:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "20",
      "day": "3"
    },
    {
      "0": {
        "id": 142,
        "name": "Pilates",
        "quota": 8,
        "course_date": "2015-09-04T12:15:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "12",
      "day": "4"
    },
    {
      "0": {
        "id": 141,
        "name": "Crunch 30 Min.",
        "quota": 8,
        "course_date": "2015-09-04T19:30:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "19",
      "day": "4"
    },
    {
      "0": {
        "id": 130,
        "name": "Crunch 30 Min.",
        "quota": 8,
        "course_date": "2015-09-05T14:00:00+0000",
        "studio": {
          "id": 2,
          "name": "Stüdyo 2"
        },
        "trainer": {
          "id": 1,
          "name": "-"
        }
      },
      "hour": "14",
      "day": "5"
    }
  ]
}

我想我现在很接近.但它一定是这样的;

DAY
    HOUR
    HOUR
DAY
    HOUR
    HOUR

解决方法:

获取可视化示例表,请使用:

WEEKDAY(date)

Returns the weekday index for date (0 = Monday, 1 = Tuesday, … 6 =
Sunday

select hour(date), -- group by hour
case when weekday(date)=0 then course_name else null end as Monday, -- 1 col for each weekday
.....
case when weekday(date)=6 then course_name else null end as Sunday

from table 
where -- select a monday to sunday calendar week unique by year 
date(date) - interval weekday(date)=date(curdate()) - interval weekday(curdate())
group by hour(date)

要获得您提到的其他变体:

select right(date, 2), -- day of month,
hour(date) --hour,
course_name
from table
group by 1,2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐