如何在SQL中存储多个虚拟货币

时间:2011-12-06 18:04:31

标签: php sql

我有一个名为users的表格,目前包含整数类型的列money ,其中包含用户当前拥有的金额。

但是,我想扩展并拥有两种基于彼此的货币。 1金= 10银= 100铜(或类似的东西)。当你获得100铜奖时,他们将转换为1金币。与10青铜= 1银相同。 所有这些货币在我的表格中都有自己的列。我有一个钩子函数,可以在每个请求中调用并更新资金,如果可能的话。

我被告知虽然我可以使用只有一列money 然后我可以使用变量并取出不同的货币。

但我的问题是:什么是最好的方法?

如果后一种方法最好:我如何将变量放入现有对象(包含用户数据的对象;我认为它被称为stdClass或类似的东西)? $user->username等等?

5 个答案:

答案 0 :(得分:4)

只需存储相同数量的青铜。然后使用以下算法尽可能多地转换为黄金,从剩余部分尽可能多地转换为银,其余部分保留为青铜:

  1. 将黄金数量设置为零,将银色设置为零,将青铜设置为数据库所说的任何内容。
  2. 设置等于青铜数的银数除以10(使用整数除法)。设置青铜的数量等于青铜mod 10的数量。
  3. 设置等于银数的金数除以10(使用整数除法)。设置银的数量等于银模数10。
  4. 所以,如果你有9,327青铜:

    1. gold = 0,silver = 0,bronze = 9,327
    2. gold = 0,silver = 932,bronze = 7
    3. gold = 93,silver = 2,bronze = 7

答案 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