我有一个名为users
的表格,目前包含整数类型的列money
,其中包含用户当前拥有的金额。
但是,我想扩展并拥有两种基于彼此的货币。 1金= 10银= 100铜(或类似的东西)。当你获得100铜奖时,他们将转换为1金币。与10青铜= 1银相同。 所有这些货币在我的表格中都有自己的列。我有一个钩子函数,可以在每个请求中调用并更新资金,如果可能的话。
我被告知虽然我可以使用只有一列money
然后我可以使用变量并取出不同的货币。
但我的问题是:什么是最好的方法?
如果后一种方法最好:我如何将变量放入现有对象(包含用户数据的对象;我认为它被称为stdClass
或类似的东西)? $user->username
等等?
答案 0 :(得分:4)
只需存储相同数量的青铜。然后使用以下算法尽可能多地转换为黄金,从剩余部分尽可能多地转换为银,其余部分保留为青铜:
所以,如果你有9,327青铜:
答案 1 :(得分:0)
之前我做过类似的事情,我同意你应该只有一列“钱”,并根据需要计算其他货币。如果您有单独的列,则必须依赖触发器或应用程序逻辑来保持它们同步。
答案 2 :(得分:0)
我会把所有东西都转换成青铜,只存储那个价值。任何类型的交易也将首先转换为青铜。您需要转换为银色或金色的唯一时间是显示。
答案 3 :(得分:0)
一种方法是仅将所有货币存储在青铜器中。
这样,如果你有123青铜,你可以转换它们
123 / 100 //Gold with integer division which should be 1
剩余的是123 - NumGold * 100
,即 23
所以你有
23 / 10 // Silver with integer division should be 2
剩余的是23 - NumSilver * 10
,即 3 青铜币。
这是SQL只知道青铜币并将它们显示为金色,银色都在应用层中
答案 4 :(得分:0)
接受的答案没有考虑超过9999的值,因为它会增加10个以上的银并给出错误的输出。
最好的解决方案是:
var bronze, silver, gold;
var myMoney = 32141; // number from database
bronze = myMoney % 10;
myMoney = (myMoney - bronze) / 10;
silver = myMoney % 10;
gold = (myMoney - silver) / 10;
输出:
gold = 321
silver = 4
bronze = 1