我想在Yii2中使用 Highcharts 绘制图表。我有一个 student_detail 表,其中包含 year,height,province_id 和另一个省表。
我希望每年检索所有省份的平均高度的行。我想在student_detail表中没有一年的行时获得零值。
static struct sigaction sa, old;
static jmp_buf env;
static void myalarm(int sig)
{
printf("alarm!\n");
siglongjmp(env,1);
}
int execution_time_limit( void (*fun)(void *), void *parameter, int period)
{
sa.sa_handler = myalarm;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sigaction(SIGALRM, &sa, &old);
alarm(period);
if(sigsetjmp(env,1) == 0) {
fun(parameter);
sigaction(SIGALRM, &old, NULL);
}
else
return 0;
return 1;
}
返回:
static struct sigaction sa, old;
static jmp_buf env;
int ret = 0;
static void myalarm(int sig)
{
printf("alarm!\n");
ret = 1;
}
int execution_time_limit( void (*fun)(void *), void *parameter, int period)
{
sa.sa_handler = myalarm;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sigaction(SIGALRM, &sa, &old);
alarm(period);
fun(parameter);
sigaction(SIGALRM, &old, NULL);
return ret;
}
查询:
SELECT DISTINCT year FROM student_detail ORDER BY year
返回:
2000
2001
2009
2012
2013
2014
2015
我希望KP和Punjab缺少年份的数据(显示为0)。
答案 0 :(得分:1)
要想失踪多年,您需要引入years
表。然后,您可以使用cross join
在年份和省份之间创建cartesian product
。最后,您可以使用outer join
来获取所请求的数据:
SELECT temp.name AS name,
GROUP_CONCAT(IFNULL(temp.height,0) order by year) AS DATA,
GROUP_CONCAT(year order by year) AS years
FROM ( SELECT years.year AS year, p.name AS NAME, FLOOR(AVG(sd.height)) AS height
FROM (
select 2010 year union all select 2011 union all select 2012
union all select 2013 year union all select 2014 union all select 2015
) years
cross join province p
left join student_detail sd on years.year = sd.year and sd.province_id = p.id
GROUP BY years.year, p.name
ORDER BY years.year )
AS temp
GROUP BY name