php mysql 双条件排序_多字段排序 -- PHP版

本文介绍了如何在PHP中实现一个多字段排序的算法,详细解析了如何处理平均分和发行时间的排序问题,以及如何使用自定义的排序算法对游戏排行榜进行排序。文章最后提供了排序算法的代码实现,并探讨了其时间复杂度和潜在的性能优化方案。
摘要由CSDN通过智能技术生成

上期单机redis平稳重启的我的解决办法:

用不同的端口来搭建一个cluster,这样就可以不中断服务重启了,而且,管理多块小内存可能比管理一大块内存要好。

闲来有空,说一下自己写的一个多字段排序算法。

之前有一个需求是每日更新游戏排行榜,需要把近7天新增的游戏评价集合,计算平均分,按平均分倒序排列,平均分相等的按照游戏发行时间倒序来排。

数据库设计的时候是按照游戏id进行hash,对10取模获取游戏评价表名的。然而把数据集合起来之后,需要对数据进行重新排序,这里就不能用mysql的order by了。(其实也可以的,新建一个临时表来查询,但是估计没人想用这么傻的方法)

既然这样,就需要自己手写一个多字段排序的算法来解决这个问题了。(先说一下结果,我写完之后,发现php有现成的function可以用,array_multisort,看官们可以去查一下手册看用法,但是我自己写的这个还有另外一个用处,就是对不进行排序的字段可以一并保留输出。但从性能来说,肯定是php原生的function会高得多,所以要看情况来使用)

首先来明确一下思路,对一个 list 进行排序(这里我用 list,因为 set 没有重复值,list更符合大多数情况),排序有顺序和倒序。list 中 n 个元素前面 j 个值都相同,则比较下一级字段,如果所有字段的值都相等,则这 n 个元素可以视为相同,则只要它们的排序是相连的即可。另外,如果某两个元素全部字段都相等,它们可以互换位置,也可以不换位置。如果换位置,这个排序就称为不稳定的,反之就是稳定的。

ps:我写的这个算法是不稳定的。。。o(╥﹏╥)o

做法:建立一个新的空 list,从输入的 list 取出一个(头尾都可)这里称为tmp,按顺序去跟新的 list 中的元素比较(顺序搜索法),如果搜索到一个元素是,按照当前排序规则是可以排在当前元素的前面的,或者两元素相等,则让tmp占据新 list 的当前位置,当前元素及其后面的元素依次往后移动(插入排序)。到最后如果搜索不到符合条件的元素,则让tmp直接进入队尾。说的有点多,来看代码。talk is cheap,show me the code。

/**

* [multiSortArray 数组多字段排序(算法为顺序搜索和插入排序,是不稳定的排序,但可以维持其他不排序字段不变,时间复杂度大概是O(n²),空间复杂度不会算),不关心非排序字段可用PHP原生函数ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值