关于V2EX排行榜排序的OrderBy怎么写?

2012-12-28 10:43:13 +08:00
 kenneth
排行榜要先按金排,再按银拍,再按铜排。3个orderby,但是先考虑金
3470 次点击
所在节点    MySQL
15 条回复
66450146
2012-12-28 10:45:40 +08:00
我觉得全部按照换算后的铜币数量保存排序然后显示的时候换算成金/银/铜会更容易一些
best1a
2012-12-28 10:51:56 +08:00
说不定后端存的就只是铜币,然后前端输出的时候再转换...
kenneth
2012-12-28 11:02:41 +08:00
@66450146 @best1a
我试着排了一下,但是不对。
http://www.mvmap.com/top/rich
INT21H
2012-12-28 11:09:22 +08:00
Lovingly made by Kenneth
laskuma
2012-12-28 11:14:59 +08:00
肯定只存铜币啊。好比19银71铜就存成1971 最后做几个取余和整除就行了
august
2012-12-28 11:15:08 +08:00
余額是這樣的 1920.49

你點一下你的錢就看到
66450146
2012-12-28 11:15:59 +08:00
@kenneth
后端不用保存金币和银币,全部用铜币保存。就像你的银行账号不关心你存的是几张百元大钞几张十元钞票几个钢蹦,都直接按照最小的分币来计算。
显示的时候再到前端计算,g = money / 10000, s = (money / 100) % 100, b = money % 100
august
2012-12-28 11:17:03 +08:00
再退一步,就算分別存在金銀銅 ,mysql 的 order by 也可以這樣寫

order by `金` desc, `銀` desc , `銅` desc;
kenneth
2012-12-28 11:24:51 +08:00
@66450146 感谢你的思路,看来得考虑写一个过滤器来计算下。
@august @laskuma @INT21H @best1a

单独存g,s,b也有一个好处,就是将来可以控制兑换比例。汇率?
INT21H
2012-12-28 11:27:22 +08:00
兑换比例个毛线。。什么时候见过 1k = 1000 这个比例变过?
kenneth
2012-12-28 11:30:16 +08:00
@INT21H 咋了,又错了?我和你实物交换,我又不和你算成货币。
另外说下@august 这样做也可以
Desc(User.gold),Desc(User.silver),Desc(User.bronze)
现在排序正确了。
http://www.mvmap.com/top/rich
laskuma
2012-12-28 11:35:40 +08:00
@kenneth 能排一次何必要排3次。。。性能下降。。
kenneth
2012-12-28 11:38:32 +08:00
@laskuma Int又索引的情况,性能下降有限。如果要实物交换,控制兑换率,就需要分3种,如果不需要,还是做成money一个字段的好。我菜鸟,设计很多纰漏,感谢大家指正。
cabbala
2012-12-28 13:08:56 +08:00
@kenneth 问题的关键是你想让金银铜成为一种货币还是三种货币。
如果是一种,那么只存铜币,如果是三种,那么分别存。。。

三种货币比较好玩,可以设定一个买卖中心

但是v2ex明显是一种货币,因为会自进位
alwaysbeta
2012-12-28 13:35:11 +08:00
mark

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/56048

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX