Tencent / Biny

Biny is a tiny, high-performance PHP framework for web applications
BSD 3-Clause "New" or "Revised" License
1.69k stars 259 forks source link

自定义排序方面的问题想请教一下 #110

Open 3DMXM opened 4 years ago

3DMXM commented 4 years ago

事情是这样的,我自定了一套积分算法: 积分 = 浏览/2 + 点赞 + 收藏*2

然后我想让热门内容按照积分从高到低进行排序 “积分”这个没有在数据库存为字段,如果要在数据库加的话要刷10多万条数据,感觉蛮麻烦的; 如果: 浏览是“click” 点赞是“mark” 收藏是“collection” 积分存为“integral”

请问要怎么写才能让内容按照积分从高到低进行排序

billge1205 commented 4 years ago

可以使用sql模版实现自定义计算后的字段orderby排序的逻辑,但不建议这么做,不命中索引的sql语句执行是非常慢的,建议脚本计算下积分再入库根据积分进行排序

3DMXM commented 4 years ago

但是积分是随着浏览、点赞、收藏变动而变动的,如果把积分加到字段的话,每当“浏览、点赞、收藏”变动时,都要把积分也更新一下,感觉很麻烦。 另外,sql语句我没怎么用过,如果用原生SQL是怎么写的呢

billge1205 commented 4 years ago

select (click*2+mark+collection*2) as score from xxxxx where xxxxx order by score desc

billge1205 commented 4 years ago

@3DMXM 刚想了下 其实按你的逻辑 可以再设个积分字段,浏览时积分+1,点赞时+2,收藏时+4。本来就要更新的只是多更新个字段而已,通过计算排序性能肯定很差的哈

3DMXM commented 4 years ago

好的,谢谢