查出这样的数据怎么排序?

大连巴掌 发布于 06/28 14:53
阅读 346
收藏 0

各位大神,我有个数据排序的问题整不明白啦。事情是这样的:

我存学生考号的表是这样的:

 

每个考号对应 X 个学科成绩。

成绩表是这样的:

 

我最终要查询每个考号对应的每个学科的成绩,能根据条件筛选、按各学科的成绩排序。

我查询是从考号开始的,然后关联预载入考号对应的成绩。

查询后的结果是这样的:

 

为了让前台好显示,我把数据重组成数组,变成这样:

 

最后是排序功能,排序功能我单独整了一个方法,是这样的:

到这里能实现我想要的功能。

但是!但是速度太慢啦,5秒多!!

这个谁用了都会崩溃,如果没有排序会在1.8s所以我把我的整个流程告诉大神,请大神给个建议,怎么能让速度变得更快一些。

 

加载中
0
不喜欢暴力运动
不喜欢暴力运动
PHP有个现成是数组排序函数 两个for嵌套太伤了
0
大连巴掌
大连巴掌

引用来自“不喜欢暴力运动”的评论

PHP有个现成是数组排序函数 两个for嵌套太伤了

array_multisort 函数我试过,是很好用,但是一个学生的成绩有不存在的,数组类似于这样的。

[

0=>[

yuwen=>90,

shuxue=>91,

yingyu=>92

],

1=>[

yuwen=>90,

shuxue=>91,

],

2=>[

yuwen=>90,

yingyu=>92

],

]

 

不喜欢暴力运动
不喜欢暴力运动
我们可以给个默认值0呀
0
叶知一秋

php中双层循环的代码基本都可以优化,可以看看官方文档中的array扩展中的函数,获益良多

0
f
freezingsky

慢? db查询慢, 还是内存排序慢? 这楼里的PHPer都在讲内存里排序 .....

大连巴掌
大连巴掌
内存排序慢
0
梅开源
梅开源

一般在数据库里排序,或者弄个前端UI库,可以点击不同字段前端处理排序。

0
前端大师傅
前端大师傅

1.楼主的做法有问题,如果楼主的意图是这样:

考号   语文 数学 英语  总分 平均分 

1       99  88      77  

2      99   78     98 

只能加上总分或平均分才能排序,否则是不可能按高低排的,因为每个考生的分数有高有低。

还有一种就是楼主不作行列转换,直接按楼主的chengji表的结构,再left join 课程和考号表的话这就非常简单了,即这里不需要像楼主这样在程序里操作,而是把SQL改一下就可以了,在数据库里排序。

select c.*,k.kaoshi from

cj_chengji c

left join cj_kaohao k on  c.kaohao_id = k.haohao_id

order by c.kaohao_id asc,c.subject_id asc,c.defen desc

 

返回顶部
顶部