[英]How to Generate a Week Table and Split by Day and Hour
First, to be clear; 首先,要明确; there is an example like this:
有一个这样的例子:
I can get courses with this query: 我可以通过这个查询获得课程:
$qb
->select("c")
->from("ATLReservationBundle:Course", "c")
->where("WEEK(c.courseDate, 1) = WEEK(CURRENT_DATE(), 1)")
->orderBy("c.courseDate", "ASC");
QueryResult: 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": "-"
}
} ] }
But i want to group this data like; 但我想将这些数据分组为;
DAY - 31
HOUR - 12:15 > Coursename
HOUR - 19:30 > Coursename
DAY - 01
HOUR - 10:00...
I don't know how to do this, anyone? 我不知道怎么做,有人吗?
New Query: 新查询:
$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");
But; 但; there is a problem with this query i could not group by
HOUR(c.courseDate), DAY(c.courseDate)
because i got this error: 这个查询有问题我不能按
HOUR(c.courseDate), DAY(c.courseDate)
因为我收到了这个错误:
Error: Cannot group by undefined identification or result variable.
错误:无法按未定义的标识或结果变量进行分组。
So, i defined hour and day as variable in select area. 因此,我将时间和日期定义为选择区域中的变量。 I don't want to see day and hour as different variables.
我不希望将日和小时视为不同的变量。
QueryResult: 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"
}
]
}
I think i'm close now. 我想我现在很接近。 But it must be like;
但它一定是这样的;
DAY
HOUR
HOUR
DAY
HOUR
HOUR
TO get your visual example table, use: 要获取可视化示例表,请使用:
WEEKDAY(date)
WEEKDAY(日期)
Returns the weekday index for date (0 = Monday, 1 = Tuesday, … 6 = Sunday
返回日期的工作日索引(0 =星期一,1 =星期二,... 6 =星期日
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)
To get the other variant you mentioned: 要获得您提到的其他变体:
select right(date, 2), -- day of month,
hour(date) --hour,
course_name
from table
group by 1,2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.